UTC 中的 Java Current OffsetDateTime 对象,具有三位小数秒 (YYYY-MM-dd'T'HH:mm:ss.SSS'Z')

问题描述 投票:0回答:1
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());
    }
java utc offsetdatetime
1个回答
0
投票

上面的片段给了我六位数的小数秒

这是不正确的。

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));
© www.soinside.com 2019 - 2024. All rights reserved.