在 Joda-Time 中,两个日期之间的天数 Days类

2022-08-31 04:48:12

如何查找两个 Joda-Time 日期时间实例之间的天数差异?对于“天差”,我的意思是如果开始于星期一,结束于星期二,则无论开始和结束日期的小时/分钟/秒如何,我都期望返回值为1。

Days.daysBetween(start, end).getDays()如果开始在晚上,在早上结束,则给我0。

我对其他日期字段也遇到了同样的问题,所以我希望有一种通用的方法来“忽略”重要性较低的字段。

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


答案 1

令人讨厌的是,withTimeAtStartOfDay的答案是错误的,但只是偶尔。你想要:

Days.daysBetween(start.toLocalDate(), end.toLocalDate()).getDays()

事实证明,“午夜/一天的开始”有时意味着凌晨1点(在某些地方,夏令时以这种方式发生),Days.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


答案 2

Days

Days与 withTimeAtStartOfDay 方法一起使用应该可以工作:

Days.daysBetween(start.withTimeAtStartOfDay() , end.withTimeAtStartOfDay() ).getDays()