java 中的字符串时间戳到 Date

String timestamp to Date in java

提问人:VIMALJITH K 提问时间:3/4/2023 最后编辑:AnonymousVIMALJITH K 更新时间:4/17/2023 访问量:125

问:

我想在不使用 simpledateformat 的情况下将字符串时间戳“20221225182600Z+0100”转换为 java 中的日期

我收到错误

文本“20221225182600Z+0100”无法在索引 2 处解析

String dateString = "20221225182600Z+0100";
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssZ");
ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateString,  dateTimeFormatter.ISO_OFFSET_TIME);
System.out.println(zonedDateTime);
java 时间 datetime-parsesing zoneddatetime datetimeformatter

评论

2赞 Mark Rotteveel 3/4/2023
你正在解析而不是你自己的格式化程序(Java 中的历史错误是你可以通过该类的实例访问该类的静态字段,这就是为什么它使用局部变量进行编译)。用DateTimeFormatter.ISO_OFFSET_TIMEdateTimeFormatterZonedDateTime.parse(dateString, dateTimeFormatter)
3赞 Jon Skeet 3/4/2023
“Z+0100”是一种非常奇怪的格式。“Z”表示“无 UTC 偏移量”,而“+0100”表示“1 小时 UTC 偏移量”。这些数据从何而来?
0赞 VIMALJITH K 3/4/2023
嗨,马克,我像你说的那样尝试过,但没有成功
0赞 VIMALJITH K 3/4/2023
嗨,乔恩,感谢您的回复。我是从一些扫描数据中得到的
1赞 VIMALJITH K 3/5/2023
字符串 dateString = “20221225182600Z+0100”;DateTimeFormatter dtf = DateTimeFormatter.ofPattern(“uuuuMMddHHmmss'Z'Z”);OffsetDateTime offsetDateTime = OffsetDateTime.parse(dateString, dtf);LocalDateTime localDateTime = offsetDateTime.toLocalDateTime();

答:

2赞 Basil Bourque 3/5/2023 #1

无法解析废话

我想将字符串时间戳“20221225182600Z+0100”转换为日期

你不能。

您的输入字符串显然是日期 2022-12-25,时间为 18:26。加上 UTC 的两个偏移量。

  • Z接近终点意味着与UTC的时间子午线相差零小时-分钟-秒。
  • 是其缩写,意思是比UTC早一小时。+0100+01:00

👉 包含两个带有日期时间的偏移量是没有意义的。你不能解析废话。

你的情况就像要求用两种货币解析一笔钱。“42 澳元美元”作为输入是无稽之谈。

您的输入可能是错误的。我想这两个偏移量中的一个是有意的,而另一个是意外。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" )