Java OffsetDateTime 返回错误的偏移量

标签 java offsetdatetime

我有一个 Java 时间戳值,如: 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”日期返回不同的偏移量。

最佳答案

简答:历史 .
从奇怪的判断 05:53:28偏移量,您当前的区域是 Asia/Calcutta ← 好吧,这个时区已经重命名为 Asia/Kolkata .
Back in 1799 ,每个城市都有自己的本地时间,这就是为什么这个偏移量很奇怪的原因。时区经常因政治决策而改变,Java 从每个 Java 版本随附的时区数据中获取这些数据。
所以那些不同的偏移实际上是正确的。
如果您的前端无法解析这个奇怪的偏移量,那么您需要修复您的前端。

更多信息和类似观察:

  • Why is subtracting these two times (in 1927) giving a strange result?
  • DateFormatter gives weird timezone for very old dates
  • Providing date string with offsets (+0530) vs specifying timezone separately in display name (Asia/Calcutta)
  • Java OffsetDateTime returning wrong offset
  • 关于Java OffsetDateTime 返回错误的偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68995551/

    相关文章:

    java - 在现有的 java 类上使用 kotlin 实现 Parcelable

    java - 使用 Glide Image Load setDataSource 运行时异常失败 : status =

    datetime - Kotlin DateTimeParseException

    java - 从数据库检索时 OffsetDateTime 值发生更改

    java.lang.NullPointerException : null when I call a repository

    java - 在 Play 2.2.x 中使用 Ebean 的单向 OneToMany 中出现异常

    oracle - Java 和 Oracle 时间戳(带时区)

    java-8 - 如何将 LocalDateTime 转换为 OffsetDateTime?

    java - 为什么 OffsetDateTime 不能在 Java 8 中解析 '2016-08-24T18:38:05.507+0000'

    java - 无法测试 Maven 插件(ClassNotFound - ArtifactTransformationManager)