如何找到两个Joda-Time DateTime实例之间的天数差异?
我的意思是,如果开始是星期一,结束是星期二,我期望返回值为1,而不管开始日期和结束日期的小时/分钟/秒。
天。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点(夏令时在某些地方是这样发生的)。daysBetween不能正确处理。
// 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可以避免整个问题。
令人恼火的是,withTimeAtStartOfDay答案是错误的,但只是偶尔错误。你想要的:
Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays()
事实证明,“午夜/一天的开始”有时意味着凌晨1点(夏令时在某些地方是这样发生的)。daysBetween不能正确处理。
// 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可以避免整个问题。