java計算兩個時間相差天數(shù)的方法匯總
問題描述:
輸入:兩個日期
輸出:兩個日期相差的天數(shù)
具體代碼實現(xiàn)
方法1:
通過Calendar類的日期比較。注意:這里需要考慮一下:
- 日期是跨年份的,如一個是2012年,一個是2015年的
- 年份是分閏年和平年的,各自的天數(shù)不同
/**
* date2比date1多的天數(shù)
* @param date1
* @param date2
* @return
*/
public static int differentDays(Date date1,Date date2)
{
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
int day1= cal1.get(Calendar.DAY_OF_YEAR);
int day2 = cal2.get(Calendar.DAY_OF_YEAR);
int year1 = cal1.get(Calendar.YEAR);
int year2 = cal2.get(Calendar.YEAR);
if(year1 != year2) //同一年
{
int timeDistance = 0 ;
for(int i = year1 ; i < year2 ; i ++)
{
if(i%4==0 && i%100!=0 || i%400==0) //閏年
{
timeDistance += 366;
}
else //不是閏年
{
timeDistance += 365;
}
}
return timeDistance + (day2-day1) ;
}
else //不同年
{
System.out.println("判斷day2 - day1 : " + (day2-day1));
return day2-day1;
}
}
方法2:
直接通過計算兩個日期的毫秒數(shù),他們的差除以一天的毫秒數(shù),即可得到我們想要的兩個日期相差的天數(shù)?!?/p>
/**
* 通過時間秒毫秒數(shù)判斷兩個時間的間隔
* @param date1
* @param date2
* @return
*/
public static int differentDaysByMillisecond(Date date1,Date date2)
{
int days = (int) ((date2.getTime() - date1.getTime()) / (1000*3600*24));
return days;
}
測試:
public static void main(String[] args)
{
String dateStr = "2008-1-1 1:21:28";
String dateStr2 = "2010-1-2 1:21:28";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try
{
Date date2 = format.parse(dateStr2);
Date date = format.parse(dateStr);
System.out.println("兩個日期的差距:" + differentDays(date,date2));
System.out.println("兩個日期的差距:" + differentDaysByMillisecond(date,date2));
} catch (ParseException e) {
e.printStackTrace();
}
}
結(jié)果:
兩個日期的差距:732
兩個日期的差距:732
兩種實現(xiàn)方式的比較:
方式一的話,只是通過日期來進行比較兩個日期的相差天數(shù)的比較,沒有精確到相差到一天的時間。如果是只是純粹通過日期(年月日)來比較比較的話就是方式一。
對于方式二,是通過計算兩個日期相差的毫秒數(shù)來計算兩個日期的天數(shù)差的。一樣會有一個小問題,就是當(dāng)他們相差是23個小時的時候,它就不算一天了。如下面的兩個日期
2015-1-1 21:21:28
2015-1-2 1:21:28
測試代碼:
public static void main(String[] args)
{
String dateStr = "2015-1-1 21:21:28";
String dateStr2 = "2015-1-2 1:21:28";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try
{
Date date2 = format.parse(dateStr2);
Date date = format.parse(dateStr);
System.out.println("兩個日期的差距:" + differentDays(date,date2));
System.out.println("兩個日期的差距:" + differentDaysByMillisecond(date,date2));
} catch (ParseException e) {
e.printStackTrace();
}
}
結(jié)果:
兩個日期的差距:1
兩個日期的差距:0
兩種方式的不同了,在具體時間相差不到24小時時,方式2的方式不算一天,而方式1是通過日期(年月日)來判斷的,所以算相差一天。
以上就是java計算兩個時間相差天數(shù)的方法,并進行了詳細(xì)比較,希望對大家的學(xué)習(xí)有所幫助。
相關(guān)文章
基于springcloud異步線程池、高并發(fā)請求feign的解決方案
這篇文章主要介紹了基于springcloud異步線程池、高并發(fā)請求feign的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
SpringBoot Maven打包失敗報:class lombok.javac.apt.Lombo
最新項目部署的時候,出現(xiàn)了一個maven打包失敗的問題,報:class lombok.javac.apt.LombokProcessor錯誤,所以本文給大家介紹了如何解決SpringBoot Maven 打包失?。篶lass lombok.javac.apt.LombokProcessor 錯誤,需要的朋友可以參考下2023-12-12
關(guān)于idea-web.xml版本過低怎么生成新的(web.xml報錯)問題
今天通過本文給大家分享idea-web.xml版本過低怎么生成新的(web.xml報錯)問題,通過更換web.xml版本解決此問題,感興趣的朋友跟隨小編一起看看吧2021-07-07
Java中的StringTokenizer實現(xiàn)字符串切割詳解
這篇文章主要介紹了Java中的StringTokenizer實現(xiàn)字符串切割詳解,java.util工具包提供了字符串切割的工具類StringTokenizer,Spring等常見框架的字符串工具類(如Spring的StringUtils),需要的朋友可以參考下2024-01-01
Java實現(xiàn)在正則表達(dá)式中控制大小寫的方法
這篇文章主要介紹了Java實現(xiàn)在正則表達(dá)式中控制大小寫的方法,結(jié)合實例形式分析了java正則表達(dá)式中傳遞控制參數(shù)的功能與相關(guān)操作技巧,需要的朋友可以參考下2017-04-04
SpringBoot整合Security實現(xiàn)權(quán)限控制框架(案例詳解)
Spring Security是一個能夠為基于Spring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框,是一個重量級的安全管理框架,本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-08-08
如何解決@SpringBootApplication報錯問題
這篇文章主要介紹了如何解決@SpringBootApplication報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-07-07
在Mybatis @Select注解中實現(xiàn)拼寫動態(tài)sql
這篇文章主要介紹了在Mybatis @Select注解中實現(xiàn)拼寫動態(tài)sql,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11

