Ⅰ java計算兩個日期時間相差幾天,幾小時,幾分鍾等
思路是先計算兩個日期相差的毫秒數,然後分別根據每天的毫秒數、每小時的毫秒數、每分鍾的毫秒數來計算相差幾天,幾小時,幾分鍾。具體代碼如下:
public static String getDatePoor(Date endDate, Date nowDate) {
long nd = 1000 * 24 * 60 * 60;//每天毫秒數
long nh = 1000 * 60 * 60;//每小時毫秒數
long nm = 1000 * 60;//每分鍾毫秒數
long diff = endDate.getTime() - nowDate.getTime();// 獲得兩個時間的毫秒時間差異
long day = diff / nd; // 計算差多少天
long hour = diff % nd / nh;// 計算差多少小時
long min = diff % nd % nh / nm; // 計算差多少分鍾
return day + "天" + hour + "小時" + min + "分鍾";
}
然後做一個測試,調用這個方法測試一下:
可以看出兩個日期時間相差幾天,幾小時,幾分鍾都可以算出來。
(1)java判斷兩個時間擴展閱讀:
Java使用以下三種告辯方法來比較兩個日期:
1、使用 getTime() 方基橘法獲取兩個日期(自1970年1月1日經歷的毫秒數值),然後比較這兩個值。
2、使用方法 before(),after() 和 equals()。例如,一個月的12號比18號早,則 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
3、使用 compareTo() 方法,它是由 Comparable 介面定義的,Date 類實搏友團現了這個介面。
Ⅱ java 中怎麼比較兩個時間相差的秒數
方法:
java 計算兩個時間相差可以用getTime()來獲得兩個時間的毫秒數,可以這樣計算得出兩個時間的秒數的相差如下:
public int calLastedTime(Date startDate) {long a = new Date().getTime();long b = startDate.getTime();int c = (int)((a - b) / 1000);return c;}
(2)java判斷兩個時間擴展閱讀:
1、通過Date類來獲取當前時間
Date day=new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(df.format(day));
2、通過System類中的currentTimeMillis方法來獲取當前時間
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(df.format(System.currentTimeMillis()));
3、通過Calendar類來獲取當前時間
Calendar c = Calendar.getInstance();//可以對每個時間域單獨修改
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int date = c.get(Calendar.DATE);
System.out.println(year + "/" + month + "/" + date + " " +hour + ":" +minute + ":" + second);
4、 通過Date類來獲取當前時間
Date date = new Date();
String year = String.format("%tY", date);
String month = String.format("%tB", date);
String day = String.format("%te", date);
System.out.println("今天是:"+year+"-"+month+"-"+day);
Ⅲ java中如何計算出兩個日期之間相差多少天
思路就是根據它們相差的毫秒數除以每天的毫秒數(60*60*24*1000),代碼如下:
public static void main(String[] args) throws ParseException {
String date1="1987-01-01";
String date2="2010-01-01";
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd");
Date d1=sdf.parse(date1);
Date d2=sdf.parse(date2);
long daysBetween=(d2.getTime()-d1.getTime()+1000000)/(60*60*24*1000);
System.out.println("1987-01-01 與 2010-01-01 相隔 "+daysBetween+" 天");
}
運行結果如下:
(3)java判斷兩個時間擴展閱讀:
Java使用以下三種方法來比較兩個日期:
1、使用 getTime() 方法獲取兩個日期(自1970年1月1日經歷的毫秒數值),然後比較這兩個值。
2、使用方法 before(),after() 和 equals()。例如,一個月的12號比18號早,則 new Date(99, 2, 12).before(new Date (99, 2, 18)) 返回true。
3、使用 compareTo() 方法,它是由 Comparable 介面定義的,Date 類實現了這個介面。
SimpleDateFormat 是一個以語言環境敏感的方式來格式化和分析日期的類。SimpleDateFormat 允許你選擇任何用戶自定義日期時間格式來運行
例如:
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
這一行代碼確立了轉換的格式,其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是時、分、秒。
注意:有的格式大寫,有的格式小寫,例如 MM 是月份,mm 是分;HH 是 24 小時制,而 hh 是 12 小時制。
以上實例編譯運行結果如下:
當前時間為: 2018-09-14 10:16:34
菜鳥教程-Java 日期時間
Ⅳ java 判斷兩個時間段是不是有交集
publicclassDateKit{
/**
時間段的比較處理,如果包含了傳來的時段了,就說明時間沖突了
*@return
*/
publicstaticbooleanisContain(Date[]a,Date[]b){
longastatr=a[0].getTime();
longaend=a[1].getTime();
longbstatr=b[0].getTime();
longbend=b[1].getTime();
//a0包在了b0~b1之間
if(astatr>=bstatr&&astatr<=bend)returntrue;
//b0包在了a0~a1之間
if(astatr<=bstatr&&aend>=bstatr)returntrue;
returnfalse;
}
/**
時間段的比較處理,如果包含了傳來的時段了,就說明時間沖突了,(允許首尾相等而不包含的情況)
*@return
*/
(Date[]a,Date[]b){
longastatr=a[0].getTime();
longaend=a[1].getTime();
longbstatr=b[0].getTime();
longbend=b[1].getTime();
//a0包在了b0~b1之間
if(astatr>=bstatr&&astatr<bend)returntrue;
//b0包在了a0~a1之間
if(astatr<=bstatr&&aend>bstatr)returntrue;
//相等
if(astatr==bstatr&&aend==bend)returntrue;
returnfalse;
}
//功能工具擴展
publicstaticbooleanisContain(Stringastatr,Stringaend,Stringbstatr,Stringbend){
returnisContain(newString[]{astatr,aend},newString[]{bstatr,bend});
}
publicstaticbooleanisContain(String[]aStr,String[]bStr){
returnisContain(aStr,bStr,"yyyy-MM-ddHH:mm:ss");
}
publicstaticbooleanisContain(String[]aStr,String[]bStr,Stringpattern){
finalSimpleDateFormatSF=newSimpleDateFormat(pattern);
try{
returnisContain(newDate[]{SF.parse(aStr[0]),SF.parse(aStr[1])},newDate[]{SF.parse(bStr[0]),SF.parse(bStr[1])});
}catch(Exceptione){
e.printStackTrace();
}
returnfalse;
}
(Stringastatr,Stringaend,Stringbstatr,Stringbend){
returnisContainEnd(newString[]{astatr,aend},newString[]{bstatr,bend});
}
(String[]aStr,String[]bStr){
returnisContainEnd(aStr,bStr,"yyyy-MM-ddHH:mm:ss");
}
(String[]aStr,String[]bStr,Stringpattern){
finalSimpleDateFormatSF=newSimpleDateFormat(pattern);
try{
returnisContainEnd(newDate[]{SF.parse(aStr[0]),SF.parse(aStr[1])},newDate[]{SF.parse(bStr[0]),SF.parse(bStr[1])});
}catch(Exceptione){
e.printStackTrace();
}
returnfalse;
}
}
測試:
publicstaticvoidmain(String[]args)throwsParseException{
finalSimpleDateFormatSF=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");
Date[]a={SF.parse("2017-07-0611:53:00"),SF.parse("2017-07-0614:52:00")};
Date[]b={SF.parse("2017-07-0614:52:00"),SF.parse("2017-07-0616:52:00")};
System.out.println("您好,智能的電腦!請問:");
for(Datedate:a){
System.out.print(date.toString()+"~");
}
System.out.println("包含:");
for(Datedate:b){
System.out.print(date.toString()+"~");
}
System.out.println("嗎?");
booleanret=DateKit.isContain(a,b);
System.out.println("o(∩_∩)o哈哈~我猜是:"+ret);
ret=DateKit.isContainEnd(a,b);
System.out.println("o(∩_∩)o哈哈~允許首尾相等我猜是:"+ret);
}
找了半天, 沒見寫的好的. 自己動手寫個, 問題是 兩個時段,, 大部分人給的是 兩個時間點..