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());
}
2条答案
按热度按时间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());
不,这没有任何意义。这将:
vngu2lb82#
实际上,跟踪工作。