Joda-Time 中两个日期之间的天数

新手上路,请多包涵

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

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

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

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

原文由 pvgoddijn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 639
2 个回答

恼人的是,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 回避了整个问题。

原文由 Alice Purcell 发布,翻译遵循 CC BY-SA 3.0 许可协议

Days

Days 类与 withTimeAtStartOfDay 方法一起使用应该有效:

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

原文由 Michael Borgwardt 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题