【问题标题】:Scala - how to correctly add ZoneOffset when combining LocalDate and LocalTime?Scala - 结合 LocalDate 和 LocalTime 时如何正确添加 ZoneOffset?
【发布时间】:2019-10-30 10:02:18
【问题描述】:

我正在结合 LocalDate 和 LocalTime 并且需要最终结果为 UTC。

我应该在合并之前将 ZoneOffset.UTC 添加到 localDatelocalTime 还是仅在创建 OffsetDateTime 时?我尝试了不同的方法,但看不出有什么不同。

val localDate: LocalDate = java.time.LocalDate.now(ZoneOffset.UTC) // Same as without Offset - 2019-10-30
val localTime: LocalTime = java.time.LocalTime.now(ZoneOffset.UTC) // Same as without Offset - 09:55:25.997

val localDateTimeWithZone: OffsetDateTime = LocalDateTime.of(localDate, localTime)
    .atZone(ZoneOffset.UTC).toOffsetDateTime

【问题讨论】:

  • 您首先通过向其添加 Zoned/Offset(此时间测量所属的时区)信息将 LocalDateTime 转换为 ZonedDateTime。然后你把它改成你想要的任何时区(在你的情况下可能是UTC)。

标签: java scala datetime time


【解决方案1】:

有很多方法可以做到这一点。

  • 我的首选方式如下。我认为这很简单,而且没有惊喜。
    • OffsetDateTime.of(localDate, localTime, ZoneOffset.UTC)
  • 以下选项也非常好。
    • localDate.atTime(localTime).atOffset(ZoneOffset.UTC)
    • localTime.atDate(localDate).atOffset(ZoneOffset.UTC)
    • LocalDateTime.of(localDate, localTime).atOffset(ZoneOffset.UTC)
  • 我发现以下选项更令人困惑。它们也可以工作,但我个人不会使用它们。
    • localTime.atOffset(ZoneOffset.UTC).atDate(localDate)
    • localDate.atTime(localTime.atOffset(ZoneOffset.UTC))
    • OffsetTime.of(localTime, ZoneOffset.UTC).atDate(localDate)

该列表并非详尽。以上所有内容都给出了相同的结果,也与您问题中的代码相同,即 UTC 日期和时间的 OffsetDateTime。所以你可以选择。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 2021-06-21
    • 2021-02-18
    • 2020-07-13
    • 2020-11-11
    相关资源
    最近更新 更多