代码之家  ›  专栏  ›  技术社区  ›  Naim

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

  •  0
  • Naim  · 技术社区  · 2 年前
    OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneId.of("UTC"));
    

    上面的代码段给了我六位数的小数秒,但我需要一个实用程序方法,以三位数的格式(例如:2023-05-15T02:22:39.330Z)以UTC返回当前的OffsetDateTime对象(而不是String)

    这可能吗? 我试着跟上,但还是给了我六位数的小数秒。

        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 回复  |  直到 2 年前
        1
  •  1
  •   rzwitserloot    2 年前

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

    这是不正确的。一 OffsetDateTime 表示给定偏移处的时间,它 不代表当时的任何特定渲染 因此,上面的片段(参考 偏移日期时间 对象)给你。。OffsetDateTime对象。它本身并没有 任何 翻译因此,说它具有六位数的分数秒渲染是不正确的。事实上,它没有9个。你想要的9个中有多少取决于你在渲染它时所做的调用 toString() 显示6,我相信。 你无法更改

    以UTC格式返回当前OffsetDateTime对象(非字符串),格式为三位数

    因此,这是不可能的。OffsetDateTime对象不包含任何有关其渲染的相关信息。将ODT对象传递给的代码有自己的呈现器(通常是 DateTimeFormatter 对象),并且您必须更改该对象。如果你不能做到这一点,你就别无选择了。可能是其他代码正在调用 toString() -使用某些未指定的任意渲染器( 日期时间格式化程序 对象)-您永远不应该使用 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));
    
        2
  •  0
  •   Naim    2 年前

    事实上,遵循是有效的。

    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'")));
        }
    
    推荐文章