OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("UTC"));
上面的代码片段给了我六位数的小数秒,但我需要一个实用方法,它以三位数格式返回 UTC 中的当前 OffsetDateTime 对象(不是字符串)(例如:2023-05-15T02:22:39.330Z)
这可能吗? 我试着跟随,但仍然给了我六位数的小数秒。
public static OffsetDateTime offsetDateTimeUtc(){
OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("UTC"));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSS'Z'");
return OffsetDateTime.parse(offsetDateTime.toString());
}
上面的片段给了我六位数的小数秒
这是不正确的。
OffsetDateTime
代表给定偏移量的时间,它 不代表那个时间的任何特定渲染。因此,上面的代码片段(指创建 OffsetDateTime
对象)为您提供了一个 OffsetDateTime 对象。它本身并没有any渲染。因此,说它具有六位数的小数秒渲染是不正确的。实际上,它没有 9 个。您想要这 9 个中的多少取决于您在渲染它时所做的调用。它的 toString()
显示 6,我相信。 你不能改变这个.
以三位数格式返回 UTC 中的当前 OffsetDateTime 对象(不是字符串)
因此,这是不可能的。 OffsetDateTime 对象不包含有关其呈现的任何相关信息。您将 ODT 对象传递给的代码有自己的渲染器(通常是一个
DateTimeFormatter
对象),您必须更改该对象。如果你做不到,那你就别无选择。可能其他代码正在调用 toString()
- 使用一些未指定的任意渲染器(DateTimeFormatter
对象) - 你不应该使用 toString()
除非文档明确说明它呈现的内容(罕见),或用于调试目的。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSS'Z'");
是的,这个格式化程序会给你 3 位数。
return OffsetDateTime.parse(offsetDateTime.toString());
不,这没有完成任何事情。这将:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSS'Z'");
System.out.println(formatter.format(offsetDateTime));