如何解决时区偏移量+ AA:BB的SimpleDateFormat问题
我当前正在使用以下SimpleDateFormat模式:String DATE_TIME_FORMAT_PATTERN = "yyyy-MM-dd'T'HH:mm:ss,SSSXXX";
这很好,但是某些树莓派Java实现无法正确识别它:
timestamp 2020-01-21T09:41:45,434Z
在大多数情况下,这不是问题,但是对于某些树莓派PI而言,偏移量是错误的;我不要是否可以使用具有相同偏移格式(+/- 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
,
我确认这不是Pi问题。我将本地时区切换为UTC并运行以下示例:
long current = System.currentTimeMillis();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss,SSSXXX");
Date date = new Date(current);
String parsed = format.format(date);
System.out.println(parsed);
2020-08-31T15:05:27,872Z
Z出现在Windows 10上。我错过了ISO规范的那一部分。看来我必须解决这种情况下的测试:)。谢谢大家!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。