3

我有一个 Java Timestamp 值,例如:1799-12-31 19:03:58.0 当我尝试使用代码将其转换为 OffsetDateTime 时:

timestamp.toLocalDateTime().atZone(ZoneId.systemDefault()).toOffsetDateTime();

它给我的输出为:

1799-12-31T19:03:58+05:53:28

哪个没有在前端(Angular 的日期管道)解析。但是相同的代码返回时间戳的不同偏移量:2019-08-24 10:15:22.0为:

2019-08-24T10:15:22+05:30

Angular 的日期管道有效且成功地解析了哪个。

我不明白为什么它在“1799-12-31 19:03:58.0”日期返回不同的偏移量。

4

2 回答 2

7

简短的回答:历史

从奇怪的05:53:28偏移量来看,您当前的区域是Asia/Calcutta← 好吧,这个时区已重命名为Asia/Kolkata.

早在 1799 年,每个城市都有自己的当地时间,这就是为什么这个偏移量很奇怪。由于政治决定,时区经常会发生变化,Java 从每个 Java 版本附带的时区数据中获取这些数据。

所以那些不同的偏移量实际上是正确的。

如果您的前端无法解析这个奇怪的偏移量,那么您需要修复您的前端。


更多信息和类似观察:

于 2021-08-31T08:55:12.337 回答
5

我的猜测是您在亚洲/加尔各答时区 - 根据IANA 时区数据,在 1854 年之前确实有 +05:53:28 的偏移量,并且没有稳定到 +05: 30:00 到 1905 年。因此,在 1799 年,偏移量应该(根据 IANA 数据)为 +05:53:28。

换句话说,问题出在您的期望中,而不是在 Java 中。

于 2021-08-31T08:54:41.540 回答