首页 > 解决方案 > 时区偏移 +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

解决方案


如果您使用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

推荐阅读