java 计算两个日期的天数日期两个配对(8计算两个日期之间的月份)
在开发中,经常会遇见需要计算日期之间天数或月份的需求。现在咱们来讨论怎样使用Java来计算两个日期之间的天数和月份。
对于计算两个日期之间的天数,俺们是可以利用Java提供的日期类来实现。first of all,大家需要创建两个日期对象,预示起始日期和结束日期。紧接着,俺们是可以使用它们之间的时间戳来计算它们之间的天数差。
具体的实现步骤如下:
创建起始日期和结束日期的日期对象。
使用时间戳计算两个日期之间的天数差。
将天数差转换为绝对值,确保结果始终为正数。
输出计算结果。
importjava。time。LocalDate;
importjava。time。temporal。ChronoUnit;
publicclassDateCalculator{
publicstaticvoidmain(String[]args){
LocalDatestart=LocalDate。of(2022,1,1);
LocalDateend=LocalDate。of(2022,1,8);
longdays=ChronoUnit。DAYS。between(start,end);
days=Math。abs(days);
System。out。println("两个日期之间的天数差为:"+days+"天");
}
}
上述代码中,我们使用了Java8引入的日期和时间API(java。time包)来计算两个日期之间的天数。详细来讲,我们使用了LocalDate类来预示日期对象,使用ChronoUnit类的DAYS字段来计算天数差。
接着下面我们来计算两个日期之间的月份差。同样地,俺们是可以使用时间戳来计算两个日期之间的月份差。
具体的实现步骤如下:
创建起始日期和结束日期的日期对象。
使用时间戳计算两个日期之间的月份差。
将月份差转换为绝对值,确保结果始终为正数。
输出计算结果。
importjava。time。LocalDate;
importjava。time。temporal。ChronoUnit;
publicclassDateCalculator{
publicstaticvoidmain(String[]args){
LocalDatestart=LocalDate。of(2022,1,1);
LocalDateend=LocalDate。of(2022,8,1);
longmonths=ChronoUnit。MONTHS。between(start,end);
months=Math。abs(months);
System。out。println("两个日期之间的月份差为:"+months+"个月");
}
}
同样地,我们使用了Java8的日期和时间API来计算两个日期之间的月份差。这次我们使用了ChronoUnit类的MONTHS字段来计算月份差。
通过以上的代码示例,俺们是可以很方便地使用Java来计算两个日期之间的天数和月份差。这对于很多应用流程来说是特别实用的,例如计算日期范围内的工作日数量等。
希望本文对您能够起到帮助作用,谢谢阅读!!!
来源头条作者:梅子抱福开始日期:“2021-08-31”结束日期:“2021-11-30”在上述两个日期之间的91天持续时间,期望代码返回3个月的持续时间,不过以下方法仅返回2个月。这是Java8中的bug吗?日期为91天,却仅返回2个月。Perioddiff=Period。between(LocalDate。parse("2021-08-31"),LocalDate。parse("2021-11-30"));longdaysBetween=ChronoUnit。MONTHS。between(LocalDate。parse("2021-08-31"),LocalDate。parse("2021-11-30"));我try使用Joda库而不是Java8API,它真的可以工作。它会返回3,看似Java持续时间的月份计算也使用了天数。LocalDatedateBefore=LocalDate。parse("2016-08-31");LocalDatedateAfter=LocalDate。parse("2016-11-30");intmonths=Months。monthsBetween(dateBefore,dateAfter)。getMonths();System。out。println(months);不过俺就想用JDK的API。因此仍在寻找其他处理方案。因为只需要两个日期之间的月份数,请使用期间的文档来调整日期,如Jacob所述使用日期。仅需将两个实际案例的日期设置为一样的值(每月的第1天)Perioddiff=Period。between(LocalDate。parse("2021-08-31")。withDayOfMonth(1),LocalDate。parse("2021-11-30")。withDayOfMonth(1));System。out。println(diff);//P3M和其它处理方案相同:longmonthsBetween=ChronoUnit。MONTHS。between(LocalDate。parse("2021-08-31")。withDayOfMonth(1),LocalDate。parse("2021-11-30")。withDayOfMonth(1));System。out。println(monthsBetween);//3Period#between的文档指出以下内容:Thestartdateisincluded,buttheenddateisnot。此外:Amonthisconsiderediftheendday-of-monthisgreaterthanorequaltothestartday-of-month。你的月底结束日期30不大于或等于您的月底开始日期31,因此不考虑第3个月。注意和提防参数名称:publicstaticPeriodbetween?(LocalDatestartDateInclusive,LocalDateendDateExclusive)要返回3个月,您可以将endDateExclusive增添一天。于是,最好调整实施方式,使结束日期包括在内并获得需要的结果Perioddiff=Period。between(LocalDate。parse("2016-08-31"),LocalDate。parse("2016-11-30")。plusDays(1));System。out。println("Months:"+diff。getMonths());//Output->Months:3向后兼容较旧的JDK版本publicstaticintmonthsBetween(Dated1,Dated2){if(d2==null||d1==null){return-1;//Error}Calendarm_calendar=Calendar。getInstance()m_calendar。setTime(d1);intnMonth1=12*m_calendar。get(Calendar。YEAR)+m_calendar。get(Calendar。MONTH);m_calendar。setTime(d2);intnMonth2=12*m_calendar。get(Calendar。YEAR)+m_calendar。get(Calendar。MONTH);returnjava。lang。Math。abs(nMonth2-nMonth1);}永久不要使用LocalDateTime来计算两个日期之间的月份,结果奇怪且不正确,请始终使用LocalDate!!!importjava。time。LocalDate;importjava。time。LocalDateTime;importjava。time。temporal。ChronoUnit;publicclassTestMonthsDateTime{publicstaticvoidmain(String[]args){/**------------------DateTime----------------------------*/LocalDateTimet1=LocalDateTime。now();LocalateTimet2=LocalDateTime。now()。minusMonths(3);longdateTimeDiff=ChronoUnit。MONTHS。between(t2,t1);System。out。println("diffdateTime:"+dateTimeDiff);//diffdateTime:2/**-------------------------Date----------------------------*/LocalDatet3=LocalDate。now();LocalDatet4=LocalDate。now()。minusMonths(3);longdateDiff=ChronoUnit。MONTHS。between(t4,t3);System。out。println("diffdate:"+dateDiff);//diffdate:3}}privatestaticlongdurationMonths(LocalDatedateBefore,LocalDatedateAfter){System。out。println(dateBefore+""+dateAfter);if(dateBefore。getDayOfMonth()>28){dateBefore=dateBefore。minusDays(5);}elseif(dateAfter。getDayOfMonth()>28){dateAfter=dateAfter。minusDays(5);}returnChronoUnit。MONTHS。between(dateBefore,dateAfter);}