怎么计算两个Joda日期之间的天数?| Java Debug 笔记

本文正在参加「Java主题月 – Java Debug笔记活动」,详情查看<活动链接>

提问:怎么计算两个Joda日期之间的天数?

我的需求是:如果开始时间是星期一,结束时间是星期二,那么不管开始和结束日期的时/分/秒是多少,返回值都应该是1。

Days.daysBetween(start,end).getDays()如果开始时间是晚上,结束时间是早上,则为0。

我对其他日期字段也有同样的问题,所以我希望有一种通用的方法来“忽略”意义较小的字段。

换句话说,2月到3月4日之间的月份也是1,14:45到15:12之间的时差1。但是14:01和14:55之间的时差是0。

回答一

令人遗憾的是使用withTimeAtStartOfDay方法是不行的,在偶尔的情况下,会出错。

你可以使用下面的方法:

Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays()
复制代码

“午夜/一天的开始”,有时意味着凌晨1点(有些地方夏时制是这样的),这个问题上面的方法无法处理。

// 5am on the 20th to 1pm on the 21st, October 2013, Brazil
DateTimeZone BRAZIL = DateTimeZone.forID("America/Sao_Paulo");
DateTime start = new DateTime(2013, 10, 20, 5, 0, 0, BRAZIL);
DateTime end = new DateTime(2013, 10, 21, 13, 0, 0, BRAZIL);
System.out.println(daysBetween(start.withTimeAtStartOfDay(),
                               end.withTimeAtStartOfDay()).getDays());
// prints 0
System.out.println(daysBetween(start.toLocalDate(),
                               end.toLocalDate()).getDays());
// prints 1
复制代码

通过使用LocalDate可以避免问题的产生。

回答二

使用java.time.Period来计算天数

用Java8的LocalDateLocalDateTime来表示这两个日期,能更直观的计算差异

LocalDate now = LocalDate.now();
LocalDate inputDate = LocalDate.of(2018, 11, 28);

Period period = Period.between( inputDate, now);
int diff = period.getDays();
System.out.println("diff = " + diff);
复制代码

文章翻译自Stack Overflow:stackoverflow.com/questions/3…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享