在Joda Time的帮助下,正确使用时间进行夏令时

时间:2013-11-11 08:56:16

标签: java android datetime jodatime dst

由于当天的夏令时,我的结果不正确。

我用过,

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 doc中所述,

  

考虑在夏令时边界添加1天。如果你使用   添加时间为23或25小时将添加为   适当。如果您创建的持续时间等于24小时,那么您   最终会得出错误的结果。

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

所以,我希望动态地将每天所包含的小时数用24小时进行硬编码。

1 个答案:

答案 0 :(得分: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();
}

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

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);
}