1

由于那天的夏令时,我得到了不正确的结果。

我用了,

Calendar todays = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles"));
todays.set(Calendar.HOUR_OF_DAY, 24);
todays.set(Calendar.MINUTE, 0);
todays.set(Calendar.SECOND, 0);
todays.set(Calendar.MILLISECOND, 0);

Joda-Time 文档中所述,

考虑在夏令时边界增加 1 天。如果您使用时间段进行添加,则将酌情添加 23 或 25 小时。如果您创建了一个等于 24 小时的持续时间,那么您最终会得到错误的结果。

我没有找到任何关于如何使用 Joda-Time 实现这样一个时期的例子。

所以,我想动态地获取每天包含的小时数,而不是像上面提到的那样用 24 小时对其进行硬编码。

4

1 回答 1

2

最简单的方法可能是使用类似的东西:

public int getHoursInDay(LocalDate date, DateTimeZone zone) {
    DateTime start = date.toDateTimeAtStartOfDay(zone);
    DateTime end = date.plusDays(1).toDateTimeAtStartOfDay(zone);
    return new Duration(start, end).getStandardHours();
}

编辑:如果您使用的是不支持的 Joda Time 版本,Duration.getStandardHours()您可以使用:

public int getHoursInDay(LocalDate date, DateTimeZone zone) {
    DateTime start = date.toDateTimeAtStartOfDay(zone);
    DateTime end = date.plusDays(1).toDateTimeAtStartOfDay(zone);
    long millis = new Duration(start, end).getMillis();
    return (int) (millis / DateTimeConstants.MILLIS_PER_HOUR);
}
于 2013-11-11T09:26:09.920 回答