Java OffsetDateTime 返回错误的偏移量
Java OffsetDateTime returning wrong offset
我有一个 Java 时间戳值,例如:1799-12-31 19:03:58.0
当我尝试使用代码将其转换为 OffsetDateTime 时:
timestamp.toLocalDateTime().atZone(ZoneId.systemDefault()).toOffsetDateTime();
它给我的输出为:
1799-12-31T19:03:58+05:53:28
未在前端解析(Angular 的日期管道)。
但是相同的代码 returns 时间戳的不同偏移量: 2019-08-24 10:15:22.0 as:
2019-08-24T10:15:22+05:30
Angular 的日期管道有效并成功解析。
我不明白为什么它会为“1799-12-31 19:03:58.0”日期返回不同的偏移量。
我的猜测是您处于 Asia/Kolkata 时区 - 根据 IANA time zone data,到 1854 年确实有 +05:53:28 的偏移量,并且直到 1905 年才稳定到 +05:30:00。所以在 1799 年,偏移量应该(根据 IANA 数据)为 +05:53:28。
换句话说,问题出在你的预期上,而不是Java。
简答:历史。
根据奇怪的 05:53:28
偏移判断,您当前的时区是 Asia/Calcutta
← 嗯,这个时区已重命名为 Asia/Kolkata
。
Back in 1799,每个城市都有自己的本地时间,这就是为什么这个偏移量很奇怪的原因。时区经常因政治决定而改变,Java 从每个 Java 版本随附的时区数据中获取此数据。
所以那些不同的偏移量实际上是正确的。
如果您的前端无法解析这个奇怪的偏移量,那么您需要修复您的前端。
更多信息和类似观察:
- Why is subtracting these two times (in 1927) giving a strange result?
我有一个 Java 时间戳值,例如:1799-12-31 19:03:58.0 当我尝试使用代码将其转换为 OffsetDateTime 时:
timestamp.toLocalDateTime().atZone(ZoneId.systemDefault()).toOffsetDateTime();
它给我的输出为:
1799-12-31T19:03:58+05:53:28
未在前端解析(Angular 的日期管道)。 但是相同的代码 returns 时间戳的不同偏移量: 2019-08-24 10:15:22.0 as:
2019-08-24T10:15:22+05:30
Angular 的日期管道有效并成功解析。
我不明白为什么它会为“1799-12-31 19:03:58.0”日期返回不同的偏移量。
我的猜测是您处于 Asia/Kolkata 时区 - 根据 IANA time zone data,到 1854 年确实有 +05:53:28 的偏移量,并且直到 1905 年才稳定到 +05:30:00。所以在 1799 年,偏移量应该(根据 IANA 数据)为 +05:53:28。
换句话说,问题出在你的预期上,而不是Java。
简答:历史。
根据奇怪的 05:53:28
偏移判断,您当前的时区是 ← 嗯,这个时区已重命名为 Asia/Calcutta
Asia/Kolkata
。
Back in 1799,每个城市都有自己的本地时间,这就是为什么这个偏移量很奇怪的原因。时区经常因政治决定而改变,Java 从每个 Java 版本随附的时区数据中获取此数据。
所以那些不同的偏移量实际上是正确的。
如果您的前端无法解析这个奇怪的偏移量,那么您需要修复您的前端。
更多信息和类似观察:
- Why is subtracting these two times (in 1927) giving a strange result?