提问人:VIMALJITH K 提问时间:3/4/2023 最后编辑:AnonymousVIMALJITH K 更新时间:4/17/2023 访问量:125
java 中的字符串时间戳到 Date
String timestamp to Date in java
问:
我想在不使用 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);
答:
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" )
评论
DateTimeFormatter.ISO_OFFSET_TIME
dateTimeFormatter
ZonedDateTime.parse(dateString, dateTimeFormatter)