我想在不使用 simpledateformat 的情况下将字符串时间戳“20221225182600Z+0100”转换为日期
我收到一个错误
无法在索引 2 处解析文本“20221225182600Z+0100”
String dateString = "20221225182600Z+0100";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssZ");
ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateString, dateTimeFormatter.ISO_OFFSET_TIME);
System.out.println(zonedDateTime);
我想将字符串时间戳“20221225182600Z+0100”转换为日期
你不能。
您的输入字符串显然是日期 2022-12-25,时间为 18:26。加上 UTC 的两个偏移量。
Z
接近尾声意味着从 UTC 时间子午线偏移零时分秒。+0100
是+01:00
的缩写,表示比UTC提前一小时。👉 包含两个带有日期时间的偏移量是没有意义的。你不能解析废话。
你的情况就像要求用两种货币解析一笔钱。输入“42 AUD USD”是胡说八道。
您输入的
20221225182600Z+0100
可能是错误的。我想这两个补偿中的一个是有意的,而另一个是意外。
顺便说一句,我建议始终在偏移量中包含冒号。虽然 ISO 8601 标准正式允许省略,但我已经看到多个协议和库,其中
:
在小时和分钟之间是预期的。
我还建议让您的数据发布者了解仅使用标准 ISO 8601 格式以文本方式交换日期时间值的好处。参见维基百科。
您输入的标准格式是:
2022-12-25T18:26:00Z
2022-12-25T18:26:00+01:00
这两个输入代表两个时刻,👉🏽时间轴上的两个不同点,相隔一个小时。第一时刻比第二时刻晚一个小时到达。
解析标准字符串不需要格式化模式。 java.time 类在解析/生成文本时默认使用 ISO 8601 格式。
Instant.parse( "2022-12-25T18:26:00Z" )
OffsetDateTime.parse( "2022-12-25T18:26:00+01:00" )