由于当天的夏令时,我的结果不正确。
我用过,
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小时进行硬编码。
答案 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);
}