奇怪的日期问题

时间:2014-12-17 14:14:56

标签: java jodatime

在自己的类

上运行以下方法作为测试
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时不会重复出现)

2 个答案:

答案 0 :(得分:1)

为了正确使用日期,您应始终在创建日期时指定时区。 如果你这样做,你就不会得到奇怪的结果。

答案 1 :(得分:0)

问题是默认时区是在使用时区的代码的一部分中显式设置的。因此,使用默认JVM时区的每个其他调用都将使用此新时区 - 从而导致所描述的差异。