我对npm install --save-dev @fortawesome/fontawesome-free
格式化程序有疑问。
在SWAPI(https://swapi.co/documentation#people)中,您可以读取DateTimeFormatter
和created
日期,其格式如下:
edited
但是在预定义格式器部分的 Class DateTimeFormatter 文档中,我看不到任何与SWAPI日期示例匹配的格式器。
问题是,当我尝试解析它时,它正在使用 SSSSSS :
2014-12-09T13:50:51.644000Z
并使用 nnnnnn :
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSS'Z'")
您知道哪种格式正确吗?
答案 0 :(得分:1)
根据您的情况,您可能根本不需要指定格式化程序。 java.time解析(和打印)ISO 8601格式的类为其默认格式,即没有任何显式格式化程序。就像图片中的说明所言,这就是您要使用的格式。
但是,要链接的两个预定义格式器确实与您的示例匹配:
使用哪种取决于您要将字符串解析为哪种类型的任何要求。解析为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);
同样,无需格式化程序即可进行解析。输出与上面相同。
我想您看不到提到的两个格式化程序匹配的原因包括:
+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
。