本文正在参加「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的LocalDate
、LocalDateTime
来表示这两个日期,能更直观的计算差异
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