在自己的类
上运行以下方法作为测试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
时不会重复出现)
答案 0 :(得分:1)
为了正确使用日期,您应始终在创建日期时指定时区。 如果你这样做,你就不会得到奇怪的结果。
答案 1 :(得分:0)
问题是默认时区是在使用时区的代码的一部分中显式设置的。因此,使用默认JVM时区的每个其他调用都将使用此新时区 - 从而导致所描述的差异。