为了账号安全,请及时绑定邮箱和手机立即绑定

DateTimeFormatter 中的格式化程序,用于时间的 ISO 8601 日期格式

DateTimeFormatter 中的格式化程序,用于时间的 ISO 8601 日期格式

Helenr 2022-07-27 19:49:53
我有一个关于DateTimeFormatter格式化程序的问题。在 SWAPI ( https://swapi.co/documentation#people ) 中,您可以阅读日期created和edited日期,格式如下:2014-12-09T13:50:51.644000Z这个日期的描述是: 但是在 Predefined Formatters 部分的 Class DateTimeFormatter 的文档中,我看不到任何与 SWAPI 日期示例匹配的格式化程序。问题是,当我尝试解析它时,正在使用SSSSSS:DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'")并与nnnnnn:DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.nnnnnn'Z'")知道哪个是正确的格式化程序吗?
查看完整描述

1 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

根据您的情况,您可能根本不需要指定格式化程序。java.time 类将 ISO 8601 格式解析(并打印)为默认格式,即没有任何显式格式化程序。正如您图片中的描述所说,这是您所拥有的格式。


但是,您要链接的两个预定义格式化程序与您的示例相匹配:


ISO_INSTANT

ISO_OFFSET_DATE_TIME

使用哪一个取决于您要将字符串解析成的类型的任何要求。解析为Instant. 不要指定格式化程序,只需使用Instant.parse:


    String swapiCreatedString = "2014-12-09T13:50:51.644000Z";

    Instant created = Instant.parse(swapiCreatedString);

    System.out.println("Created " + created);

输出:


创建于 2014-12-09T13:50:51.644Z


我需要进一步操作解析的日期时间,例如为用户格式化它,OffsetDateTime提供更多可能性:


    OffsetDateTime created = OffsetDateTime.parse(swapiCreatedString);

同样,解析也不需要格式化程序。输出与上述相同。


我猜您没有看到提到的两个格式化程序匹配的原因包括:


这些示例均不包括秒的分数,但格式化程序接受 0 到 9 位小数(包括)秒的分数。

示例偏移日期时间具有偏移量+01:00。你不知道它也Z可以作为偏移量。它的发音为“Zulu”,表示 UTC。

更直接地回答您的问题:您的格式都不完全正确。因为正如我所说Z的是一个偏移量,你会想要这样解析它而不是一个文字,这样你就可以从字符串中获取偏移量信息。没有它,您将不知道在哪个偏移量处解释 13:50:51.644。.SSSSSS对于秒的小数部分是正确的,而.nnnnnn表示秒的纳秒,这里是不正确的。一秒钟有 10^9 纳秒,所以n只有在有 9 位纳秒时才有效。也许你自己的例子给出了最好的说明:


    // nnnnnn is incorrect

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.nnnnnn'Z'");

    String swapiCreatedString = "2014-12-09T13:50:51.644000Z";

    LocalDateTime created = LocalDateTime.parse(swapiCreatedString, formatter);

    System.out.println("Created " + created);

创建于 2014-12-09T13:50:51.000644


您会看到51.644秒数被错误地更改为51.000644。


查看完整回答
反对 回复 2022-07-27
  • 1 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信