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 轉換的歷史原因。我認為這只是一個科學追趕的問題,因為天文測量變得更加準確。
添加回答
舉報