Java Scala-如何在组合LocalDate和LocalTime时正确添加ZoneOffset?

Java Scala-如何在组合LocalDate和LocalTime时正确添加ZoneOffset?,java,scala,datetime,time,Java,Scala,Datetime,Time,我将LocalDate和LocalTime组合在一起,需要以UTC为最终结果 我应该在组合它们之前,还是仅在创建OffsetDateTime时,将ZoneOffset.UTC添加到localDate和localTime?我尝试过不同的方法,但没有发现有什么不同 val localDate: LocalDate = java.time.LocalDate.now(ZoneOffset.UTC) // Same as without Offset - 2019-10-30 val localTime

我将LocalDate和LocalTime组合在一起,需要以UTC为最终结果

我应该在组合它们之前,还是仅在创建OffsetDateTime时,将ZoneOffset.UTC添加到
localDate
localTime
?我尝试过不同的方法,但没有发现有什么不同

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

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

  • 我喜欢的方式如下。我认为它很简单,没有任何惊喜。
    • 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
。因此,您可以进行选择。

首先将LocalDateTime转换为ZoneDateTime,方法是向其中添加分区/偏移(此时间度量所属的时区)信息。然后将其更改为您想要的任何时区(可能是UTC)。