4

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

DateTime start;
DateTime end;

里面有夏令时。

我正在迭代由 {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?

4

3 回答 3

4

使用 DateTimeZone.nextTransition 方法。如果开始时间小于结束日期时间,则其间至少发生了一次时区转换。这不考虑规则更改与 DST。也就是说,时区可能有一个新规则,指示标准时间有一个新的偏移量,这将显示为时区转换。

if (start.getZone().nextTransition(start.getMillis()) < end.getMillis()) {
    // Time zone transition occurred, possibly due to DST
    ...
}
于 2012-07-11T04:21:49.083 回答
2

只要startend处于正确的时区(例如,使用此构造函数创建),那么使用它们创建的间隔应该考虑该时区的 DST。如果该间隔的持续时间不等于 24 小时,那么您已经越过了 DST 点。

于 2012-07-09T08:54:00.687 回答
0

因为夏令时严重依赖时区(有些地区不实行 DST,有些移动时钟 1 小时,有些 2 等),所以您的时间变量也必须考虑位置。

因此,您可能需要查看DateTimeZone课程

日期时区

于 2012-07-09T06:25:25.173 回答