如何使用非GMT时区解析TZ格式时间

时间:2019-03-28 01:15:58

标签: java timezone simpledateformat

我有两种格式的时间字符串。

2019-03-01T22:22:50.591-08:00   
2019-03-01T22:22:50.591Z

我正在使用以下Java代码段进行解析

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:SS" +
              ".SSS'Z'", Locale.US);
Date date = df.parse(dateString);

它在第二个字符串上工作,但在第一个上失败。可以使用哪些通用代码来解析它们?

1 个答案:

答案 0 :(得分:1)

这可能是您要寻找的:"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"

Date parsed1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.US).parse("2019-03-01T22:22:50.591Z");
System.out.println(parsed1); // Fri Mar 01 16:22:50 CST 2019

Date parsed2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX", Locale.US).parse("2019-03-01T22:22:50.591-08:00");
System.out.println(parsed2); // Sat Mar 02 00:22:50 CST 2019

正如Basil在下面指出的那样,如果您运行的是Java 8+或JSR 310的反向端口,那么这些也可以使用:

    OffsetDateTime parsed1 = OffsetDateTime.parse("2019-03-01T22:22:50.591Z");
    System.out.println(parsed1); // Fri Mar 01 16:22:50 CST 2019

    OffsetDateTime parsed2 = OffsetDateTime.parse("2019-03-01T22:22:50.591-08:00");
    System.out.println(parsed2); // Sat Mar 02 00:22:50 CST 2019