在自己的类上运行以下方法作为测试

DateTime dt = new DateTime(1942, 11, 16, 1, 0, 0);
System.out.println(dt.getChronology().getZone().getID());
System.out.println(dt);
System.out.println(dt.withZone(DateTimeZone.forID("Europe/London")));
System.out.println(dt.toDate());


给出输出:

    Europe/London
    1942-11-16T01:00:00.000+01:00
    1942-11-16T01:00:00.000+01:00
    Mon Nov 16 01:00:00 BST 1942


但是,运行包括上述方法的所有测试会导致:

    Europe/London
    1942-11-16T01:00:00.000+01:00
    1942-11-16T01:00:00.000+01:00
    Mon Nov 16 00:00:00 BDT 1942


我有点茫然如何解释这种行为...我的系统时区绝对不会在两种测试执行之间改变.....

(这是一个问题,因为在操作java.util.Date时有时也会但不可重现)

最佳答案

为了正确处理日期,创建日期时应始终指定时区。
如果这样做,您将不会得到奇怪的结果。

09-27 03:37