从 - ZonedDateTime : JAVA 中删除时区部分

Sai*_*i T 2 java timezone spring-boot java-time zoneddatetime

我正在将毫秒转换为 ZonedDateTime

Long lEpochMilliSeconds = 1668415926445;
System.out.println(ZonedDateTime.ofInstant(Instant.ofEpochMilli(lEpochMilliSeconds),ZoneId.of("UTC"));
Run Code Online (Sandbox Code Playgroud)

它给出输出:

2022-10-28T12:59:34.939Z[UTC]
Run Code Online (Sandbox Code Playgroud)

我不希望输出中包含时区“[UTC]”部分。我需要我的输出是这样的 ZonedDateTime 格式:

2022-10-28T12:59:34.939Z
Run Code Online (Sandbox Code Playgroud)

我只需要ZonedDateTime中的格式而不是 string,因为我将返回该值并在其他地方使用它

Jon*_*eet 6

我只需要格式而ZonedDateTime不是字符串

这就像说“我需要一个int知道它是十六进制而不是十进制的”。只是没有这样的概念。

如果您需要以特定方式格式化该值,则应在进行格式化时应用该格式。

您实际上应该做的可能是返回 anInstant而不是 a ZonedDateTime。默认情况下,这将按照您想要的方式进行格式化,尽管它仍然不是“对象的一部分”——只是所有瞬间的默认格式。

了解“所表示的值”(以及用于表示该值的类型)和“该值的字符串表示形式”之间的区别非常重要。您应该尽可能多地尝试使用语义上合适的类型来表示您想要表示的内容(例如ZonedDateTime,等),仅在系统边界与字符串表示形式进行转换。Instant这些系统边界需要了解预期的文本表示,并执行适当的转换,而不是期望特定的字符串表示与值本身一起通过系统。