sor*_*rab 2 java datetime-format seconds datetime-parsing zoneddatetime
我正在尝试转换字符串值“2018-10-11T12:00:00Z”;到 ZonedDateTime。如果我使用默认的 ZonedDateTime.parse(zonedDateTime) ,则 ss 部分即 00 被删除,并且我得到“2018-10-11T12:00Z”作为输出。
您能帮忙如何保留 00 作为 SS 部分吗?
String zonedDateTime = "2018-10-11T12:00:00Z";
ZonedDateTime z = ZonedDateTime.parse(zonedDateTime);
System.out.println(z); // return 2018-10-11T12:00Z
ZonedDateTime z1 = ZonedDateTime.parse (zonedDateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ") );
System.out.println(z1); // Exception : Text '2018-10-11T12:00:00Z' could not be parsed at index 19
Run Code Online (Sandbox Code Playgroud)
当您只打印ZonedDateTime
using时System.out.println
,您就隐式调用了它的toString
方法。当秒和秒的小数部分为 0 时,toString
将其忽略。无论如何,要打印它们,请使用格式化程序进行格式化(而不是使用格式化程序进行解析):
DateTimeFormatter formatterWithSeconds = DateTimeFormatter.ofPattern("uuuu-MM-dd\'T\'HH:mm:ssXXX");\n System.out.println("z with seconds: " + z.format(formatterWithSeconds));\n
Run Code Online (Sandbox Code Playgroud)\n\n输出是:
\n\n\n\n\nz 带秒:2018-10-11T12:00:00Z
\n
这里的重要区别是ZonedDateTime
对象及其字符串表示形式之间的区别。该ZonedDateTime
对象始终包含秒和纳秒,即使它们为 0。字符串表示形式可能包含也可能不包含它们。one-argZonedDateTime.parse
已解析00
秒数。顺便说一句,它接受带秒和不带秒的字符串。
顺便说一句,由于您的字符串包含偏移量 ( Z
) 并且没有时区(如 Africa/Nairobi),因此OffsetDateTime
作为表示形式匹配更精确。ZonedDateTime
如果您只是搜索/替换整个代码,代码将正常工作,OffsetDateTime
因为 API 是相似的。
如果偏移量始终为Z
(对于 \xe2\x80\x9cZulu 时区\xe2\x80\x9d 或距 UTC 的偏移量 0),请使用Instant
:
String instantString = "2018-10-11T12:00:00Z";\n Instant i = Instant.parse(instantString);\n System.out.println("As Instant: " + i);\n
Run Code Online (Sandbox Code Playgroud)\n\n我已经为您的String
变量指定了一个更适合此代码片段的名称;it\xe2\x80\x99s 仍然是相同的字符串。输出:
\n\n\n即时:2018-10-11T12:00:00Z
\n
奇怪的Instant.toString
是,即使秒数为 0,也会打印秒数。
请在 @Basil Bourque 的答案中详细了解要使用的正确类型。
\n\n\n\n\nRun Code Online (Sandbox Code Playgroud)\n// Exception : Text \'2018-10-11T12:00:00Z\' could not be parsed at index 19\n
这里的问题不在于秒,也不在于ss
。索引 19 是Z
字符串中的位置。两个参数ZonedDateTime.parse
对象,因为模式字母与日期时间字符串中的Z
a 不匹配。Z
如果您确实需要提供用于解析的格式模式字符串Z
,请使用大写X
(其中一个或多个,具体取决于非零偏移量的外观)。来自模式字母的文档:
Symbol Meaning Presentation Examples\n ------ ------- ------------ -------\n X zone-offset \'Z\' for zero offset-X Z; -08; -0830; -08:30; -083015; -08:30:15\n Z zone-offset offset-Z +0000; -0800; -08:00\n
Run Code Online (Sandbox Code Playgroud)\n\nDateTimeFormatter
文档 归档时间: |
|
查看次数: |
1924 次 |
最近记录: |