Java 奇怪的日期问题

Java 奇怪的日期问题,java,jodatime,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()

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

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
时有时也会发生这种情况,但不会重复发生)

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

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

你能给我看一下复制这个的完整代码吗issue@jbutler483:您在Java中很难做到这一点:)我建议每次删除一个测试,直到您找到需要哪些测试来演示问题。然后发布所有相关代码。我的猜测是,时区数据正在发生变化……不,这显然不是产生问题的完整代码,因为您需要将其与其他测试一起运行,以获得不同的输出。(我期待着看到完整的代码,我可以复制、粘贴、编译和运行……看看这是从哪里来的,这会很有趣。)好的,开始剥离大范围的测试。基本上做一个二进制切分-删除一半的测试,看看这是否会改变输出。如果是这样的话,就把它们放回去,然后删除另一半,等等。显然,除了您向我们展示的代码之外,还有很多代码在运行——这些代码的某些部分是相关的,但我们无法判断是什么。