JodaTime - 我怎么知道在指定的时间内是否发生夏令时?

时间:2012-07-09 06:16:11

标签: java datetime date jodatime dst

我需要知道时间是否定义为:

DateTime start;
DateTime end;

里面有DST。

我正在迭代{start,end}定义的句点集合,并在每次迭代中向前移动24小时。结果期间从午夜开始,到下午午夜前1毫秒结束。我发现如果时间段内有一个夏令时点,则会产生不正确的结果,例如:

具有:

Duration targetDuration = new Duration(24*60*60*1000L-1);
DateTime start = new DateTime("2012-03-10T00:00:00.000-08:00");
DateTime end = new DateTime("2012-03-10T23:59:59.999-08:00");   

然后转移完成:

start = end.plusMillis(1);
end = start.plus(targetDuration);

产生

start = "2012-03-11T00:00:00.000-08:00"
end = "2012-03-12T00:59:59.999-07:00"   

我想知道JodaTime中是否有任何标准API可以检查一段时间内是否有DST?

3 个答案:

答案 0 :(得分:5)

使用DateTimeZone.nextTransition方法。如果开始小于结束日期时间,则两者之间至少发生一次时区转换。这不包括与DST相比的规则更改。也就是说,时区可能有一个新规则,表明标准时间有一个新的偏移,这将显示为时区转换。

if (start.getZone().nextTransition(start.getMillis()) < end.getMillis()) {
    // Time zone transition occurred, possibly due to DST
    ...
}

答案 1 :(得分:2)

只要startend位于正确的时区(例如,使用this constructor创建),Interval created using them就应该将该时区的DST考虑在内。如果Duration of that Interval不等于24小时,那么您已经越过DST点。

答案 2 :(得分:0)

由于夏令时严重依赖于时区(某些区域不会练习夏令时,有些区域会移动时钟1小时,大约2个等),因此您的时间变量也必须考虑位置。

因此,您可能需要查看DateTimeZone

DateTimeZone