如何将 ZonedDateTime 格式化为字符串?如何将 ZonedDateTime 格式化为字符串?

2022-08-31 16:09:50

我想将 a 转换为 格式的 a。我知道这在Joda-Time其他类型的类型中是可能的,只是使用他们的....但这不适用于 .ZonedDateTimeString("dd/MM/yyyy - hh:mm")toString("dd/MM/yyyy - hh:mm")ZonedDateTime.toString()

如何将 ZonedDateTime 格式化为字符串


编辑:

我试图在另一个时区打印时间,结果似乎总是一样的:

ZonedDateTime date = ZonedDateTime.now();
ZoneId la = ZoneId.of("America/Los_Angeles");
ZonedDateTime date2 = date.of(date.toLocalDateTime(), la);

// 24/02/2017 - 04:53
System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy - hh:mm").format(date));
// same result as the previous one
// 24/02/2017 - 04:53
System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy - hh:mm").format(date2));

我和洛杉矶不在同一个时区。


编辑2:

已了解如何更改时区:

// Change this:
ZonedDateTime date2 = date.of(date.toLocalDateTime(), la); // incorrect!
// To this:
ZonedDateTime date2 = date.withZoneSameInstant(la);

答案 1

您可以使用java.time.format.DateTimeFormatter。https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html

这里有一个例子

ZonedDateTime date = ZonedDateTime.now();

System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy - hh:mm").format(date));

答案 2

非常感谢上面的内容。这是在scala中,localDateTime.now总是Zulu / UTC时间。

import java.time.format.DateTimeFormatter
import java.time.LocalDateTime
import java.time.ZoneId

val ny = ZoneId.of("America/New_York")
val utc = ZoneId.of("UTC")
val dateTime = LocalDateTime.now.atZone(utc)

val nyTime = DateTimeFormatter.
      ofPattern("yyyy-MMM-dd HH:mm z").
      format(dateTime.withZoneSameInstant(ny))