乔达两天之间的天数

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

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

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

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


令人烦恼的是,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去避开整个问题。


Days

使用Days类与withTimeAtStartOfDay方法应该工作:

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

你可以使用LocalDate

Days.daysBetween(new LocalDate(start), new LocalDate(end)).getDays() 
链接地址: http://www.djcxy.com/p/943.html

上一篇: Number of days between two dates in Joda

下一篇: Why does a new SimpleDateFormat object contain calendar with the wrong year?