如何在 Scala 中将日期格式转换为 UTC?

Con*_*per 4 java performance scala date simpledateformat

Scala中如何将日期格式转换"2021-02-28 13:38:00.597+0000"为"Mon, Feb 28,2021 15:25:00 UTC"UTC格式?

Ali*_*iel 5

如果您使用的是 Java 8 之前的旧 Java 版本,最好使用joda-time 中的DateTimeFormat 。顺便说一句,+0000区域偏移量适用于 UTC,所以我可以省略withZoneUTC(),但为了安全起见,我仍然在第一次约会时使用它:

  val oldDateString = "2021-02-28 13:38:00.597+0000"
  val OldFormat     = "yyyy-MM-dd HH:mm:ss.SSSZ"
  val NewFormat     = "EEE, MMM dd, yyyy HH:mm:ss z"

  val formatterOld = DateTimeFormat.forPattern(OldFormat)
  val formatterNew = DateTimeFormat.forPattern(NewFormat)

  val dt              = formatterOld.withZoneUTC().parseDateTime(oldDateString)
  val dateStringInUTC = formatterNew.withZoneUTC().print(dt)

  println(dt)              // 2021-02-28T13:38:00.597Z
  println(dateStringInUTC) // Sun, Feb 28, 2021 13:38:00 UTC
Run Code Online (Sandbox Code Playgroud)

更新:对于 Java 8 及更高版本,java.time API 是您的朋友。同样,withZoneSameInstant(ZoneOffset.UTC)也不是真正需要的:

  val oldDateString = "2021-02-28 13:38:00.597+0000"
  val OldFormat     = "yyyy-MM-dd HH:mm:ss.SSSZZZ"
  val NewFormat     = "EEE, MMM dd, yyyy HH:mm:ss z"

  val formatterOld = DateTimeFormatter.ofPattern(OldFormat)
  val formatterNew = DateTimeFormatter.ofPattern(NewFormat)

  val zdt             = ZonedDateTime.parse(oldDateString, formatterOld)
  val dateStringInUTC = zdt.withZoneSameInstant(ZoneId.of("UTC")).format(formatterNew)

  println(zdt)             // 2021-02-28T13:38:00.597Z
  println(dateStringInUTC) // Sun, Feb 28, 2021 13:38:00 UTC
Run Code Online (Sandbox Code Playgroud)

更新:切换到 usingZoneId.of("UTC")而不是 ,因为后者最终ZoneOffset.UTC没有打印出来,即使extends ,正如 @deHaar 提到的。String UTCZoneOffsetZoneId