T A*_*nna 0 java datetime-format zoneddatetime
我需要将字符串 2020-04-15T23:00:00+0000 转换为 ZonedDateTime。我尝试了以下但他们没有工作:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss Z");
System.out.println(ZonedDateTime.parse("2020-04-15T23:00:00+0000", formatter));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss 00:00");
System.out.println(ZonedDateTime.parse("2020-04-15T23:00:00+0000", formatter));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss 0000");
System.out.println(ZonedDateTime.parse("2020-04-15T23:00:00+0000", formatter));
Run Code Online (Sandbox Code Playgroud)
我也使用了 ISO_LOCAL_DATE_TIME 但这没有用。有任何想法吗?
更新:
我在下面试过:
OffsetDateTime dateTime1 = OffsetDateTime.parse("2020-04-15T23:00:00+0000",
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ"));
System.out.println(dateTime1.toZonedDateTime());
Run Code Online (Sandbox Code Playgroud)
我得到的输出为 2020-04-15T23:00Z,但我需要它为 2020-04-15T23:00:00Z,最后的秒数正在修剪。
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.append(DateTimeFormatter.ISO_LOCAL_DATE_TIME)
.appendPattern("XX")
.toFormatter();
String str = "2020-04-15T23:00:00+0000";
OffsetDateTime dateTime = OffsetDateTime.parse(str, formatter);
System.out.println(dateTime);
Run Code Online (Sandbox Code Playgroud)
输出:
2020-04-15T23:00Z
由于您的输入字符串包含偏移量 ,+0000并且没有时区,因此更喜欢将日期和时间表示为OffsetDateTime,而不是 a ZonedDateTime(如果您有需要 a 的特定原因ZonedDateTime,只需在上面的代码中使用该类,它将工作)。
我更喜欢使用内置格式化程序而不是编写我自己的格式模式字符串。仅对于偏移量,我使用格式模式XX(还有其他模式也可以使用)。
我得到的输出为 2020-04-15T23:00Z,但我需要它为 2020-04-15T23:00:00Z,最后的秒数正在修剪。
你很可能不会。格式为 ISO 8601,在 ISO 8601 中,秒为 0 时是可选的。OffsetDateTimeorZonedDateTime具有全精度(甚至纳秒)。省略(你所说的修剪)只发生在toString对象的方法产生的输出中。如果您需要其他 API 或其他系统的 ISO 8601 格式,那么没有秒的变体也应该可以工作。
如果您确实需要特定格式,请使用第二个DateTimeFormatter格式将其格式化为所需格式的字符串。
Mark Rotteveel 已经说过:ISO 8601 允许时间和 UTC 偏移量之间没有空格。或者反过来说,当在格式模式字符串中在ss和之间放置一个空格时Z,解析将需要在解析的字符串中包含一个空格。由于没有空间,解析失败。
| 归档时间: |
|
| 查看次数: |
826 次 |
| 最近记录: |