2 回答
TA贡献1860条经验 获得超9个赞
我对日历历史和官方计时不太了解,所以我首先确保我使用的是您的时区来测试它:
int offset = (int) TimeUnit.HOURS.toMillis(1);
String[] ids = TimeZone.getAvailableIDs(offset);
TimeZone cet = Arrays.stream(ids).map(TimeZone::getTimeZone)
.filter(tz -> tz.getDisplayName(false, TimeZone.SHORT).equals("CET"))
.findFirst().orElseThrow(
() -> new RuntimeException("No CET timezone found"));
TimeZone.setDefault(cet);
然后我检查了那个时区的一些内部运作。特别是,我打印了它的历史时间转换:
System.out.println("Transitions:");
cet.toZoneId().getRules().getTransitions().forEach(
t -> System.out.println(" " + t));
前两个这样的转换打印为:
Transition[Overlap at 1891-03-15T00:01+00:12:12 to +00:09:21]
Transition[Overlap at 1911-03-11T00:00+00:09:21 to Z]
随后是祖鲁语 (Z) 和 UTC+01:00 之间的各种“手动”转换。
因此,1900 年的午夜实际上比 1912 年相应日期的午夜晚了 9 分 21 秒。
实际上,如果将年份更改为 1912,则不会看到 9 分钟的差异:
String xmlDateIn = "1912-01-01T12:00:00";
我一直无法找到 12:12 或 9:21 转换的历史原因。我认为这只是一个科学追赶的问题,因为天文测量变得更加准确。
添加回答
举报