【发布时间】:2018-08-25 00:32:03
【问题描述】:
我正在尝试计算两个日期之间的周数。
使用 Java SE8
public long weekInBetween(Date date1, Date date2)
{
return ChronoUnit.WEEKS.between(date1.toInstant().atZone(ZoneId.systemDefault()),
date2.toInstant().atZone(ZoneId.systemDefault()));
}
使用 Joda 时间
public int weekInBetween(Date date1, Date date2)
{
DateTime dateTime1 = new DateTime(date1);
DateTime dateTime2 = new DateTime(date2);
return Weeks.weeksBetween(dateTime1.toLocalDateTime(), dateTime2.toLocalDateTime()).getWeeks();
}
但是,只要过了 DST 开始日期,即 3 月 11 日。时间将向前推 1 小时,即从 UTC-8 开始的日期变为 UTC-7。因此,中间的周数不正确,比预期提前 1 周。
例如,date1 是 Mon Feb 05 08:00:00 UTC 2018 和 date2 是 Mon Mar 12 07:00:00 UTC 2018,在这种情况下,周数返回 4 从技术上讲是合乎逻辑的,但我只想考虑日期而忽略时间和结果5周。我该怎么做?
【问题讨论】:
-
仅供参考,Joda-Time 项目现在位于maintenance mode,团队建议迁移到java.time 类。见Tutorial by Oracle。