我需要知道时间是否定义为:
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?
答案 0 :(得分:5)
使用DateTimeZone.nextTransition方法。如果开始小于结束日期时间,则两者之间至少发生一次时区转换。这不包括与DST相比的规则更改。也就是说,时区可能有一个新规则,表明标准时间有一个新的偏移,这将显示为时区转换。
if (start.getZone().nextTransition(start.getMillis()) < end.getMillis()) {
// Time zone transition occurred, possibly due to DST
...
}
答案 1 :(得分:2)
只要start
和end
位于正确的时区(例如,使用this constructor创建),Interval created using them就应该将该时区的DST考虑在内。如果Duration of that Interval不等于24小时,那么您已经越过DST点。
答案 2 :(得分:0)