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

sz81bmfz  于 2023-05-15  发布在  Java
关注(0)|答案(2)|浏览(194)
OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("UTC"));

上面的代码片段给出了六位小数秒,但我需要一个实用程序方法,以三位数格式返回UTC中的当前OffsetDateTime对象(而不是String)(例如: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());
    }
9cbw7uwe

9cbw7uwe1#

上面的片段给了我六位数的小数秒
这是不正确的。OffsetDateTime表示给定偏移的时间,它 * 不表示该时间 * 的任何特定呈现。因此,上面的代码片段(参考OffsetDateTime对象的创建)为您提供了.. OffsetDateTime对象。它本身没有任何渲染。因此,说它有六位数的小数秒渲染是不正确的。实际上,它没有,它有9个。您需要这9个中的多少个取决于您在呈现它时所做的调用。它的toString()显示6,我相信。你不能改变它
以三位数格式返回当前UTC中的OffsetDateTime对象(非String)
因此,这是不可能的。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));
vngu2lb8

vngu2lb82#

实际上,跟踪工作。

public static OffsetDateTime offsetDateTimeUtc(){
        OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("UTC"));
        return OffsetDateTime.parse(offsetDateTime.format(DateTimeFormatter.ofPattern("YYYY-MM-dd'T'HH:mm:ss.SSS'Z'")));
    }

相关问题