Java 中日期的字符串时间戳

问题描述 投票:0回答:1

我想在不使用 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);
java java-time datetime-parsing zoneddatetime datetimeformatter
1个回答
2
投票

不能解析废话

我想将字符串时间戳“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" )
© www.soinside.com 2019 - 2024. All rights reserved.