java - 时区偏移 +AA:BB 的 SimpleDateFormat 问题
问题描述
我目前正在使用以下 SimpleDateFormat 模式:
String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss,SSSXXX";
这很好用,但是一些 raspberry Pi java 实现不能正确识别它:
timestamp 2020-01-21T09:41:45,434Z
在大多数情况下,这不是问题,但是对于某些树莓派来说,偏移量是错误的;我不想要那个。是否有具有相同偏移格式 (+/-HH:mm) 的替代模式可以工作?我尝试了各种模式,但似乎没有一个能产生相同的输出。
我还使用了以下工具来搜索这样的模式:https ://javadevtools.com/simpledateformat ,尽管它没有结果。
注意:这种格式的示例输出是1997-07-16T19:20:30,45+01:00
,偏移量中有一个冒号。
解决方案
如果您使用java.time
,尤其是这两个类java.time.OffsetDateTime
(本 JavaDoc 中解释了模式符号)和java.time.format.DateTimeFormatter
,您或您的 Raspberry Pi 将能够正确解析时间戳(它的格式很奇怪,使用逗号将秒的小数部分与秒分开)。
以下示例解析您的timestamp
并输出默认格式:
public static void main(String[] args) {
String timestamp = "1997-07-16T19:20:30,45+01:00";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss[,SSS]xxx");
OffsetDateTime odt = OffsetDateTime.parse(timestamp, dtf);
System.out.println(odt);
}
输出:
1997-07-16T19:20:30.450+01:00