DateTime API根据代码执行时间生成不同的结果

时间:2017-02-15 13:44:45

标签: jodatime

我正在尝试使用joda DateTime创建固定日期时间,令人惊讶的是,根据代码执行时间(当前系统时间)生成了不同的结果。 这是代码

 DateTimeZone.setDefault(DateTimeZone.forID("Europe/Brussels"));
 DateTime t1 = new DateTime().withDate(2012, OCTOBER, 28).withTime(2, 0, 0,  50);
 //Note that 2012, OCTOBER, 28, 02:00:00 is a DST swtich time in Belgium

代码产生两种不同的结果(TimeZone偏移变化)

//Please note that the local time zone is CET. 
00:00:00:00 > execution time < 03:00:00  -> 2012-10-28T02:00:00.050+02:00
03:00:00:00 >= execution time =< 24:00:00  -> 2012-10-28T02:00:00.050+01:00   

另一方面,使用构造函数会产生相同的结果

DateTimeZone.setDefault(DateTimeZone.forID("Europe/Brussels"));
DateTime dateTime = new DateTime(2012, OCTOBER, 28, 2, 0, 0, 50); //gives 2012-10-28T02:00:00.050+02:00

我的印象是应该使用构造函数而不是withDate / Time方法。但我有点困惑为什么DateTime无法处理这个?

1 个答案:

答案 0 :(得分:1)

嗯,表达式new DateTime()对于执行时间是明智的,因此它最终会得到不同的偏移量。 对于有问题的具体值,存在矛盾(当地时间相同发生两次!)。

我认为你最好选择另一个构造函数,而是显式设置所有必需的字段值,然后调用

withLaterOffsetAtOverlap()

withEarlierOffsetAtOverlap()

另请参阅DateTime的{​​{3}}。