4

我正在尝试使用从数据库获得的时区解析格式时间戳字符串。字符串如下:

   SimpleDateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSZ");

    SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); 
    Date d1 = mdyFormat.parse("2014-04-01 15:19:49.31146+05:30");

    String mdx = sdf.format(d1);

    System.out.println(mdx);

问题是,我收到一条错误消息:

Exception in thread "main" java.text.ParseException: Unparseable date: "2014-04-01 15:19:49.31146+05:30"
    at java.text.DateFormat.parse(DateFormat.java:357)
    at com.karthik.Timestampvalidate.main(Timestampvalidate.java:31)

有谁知道如何解决这一问题 ?

4

2 回答 2

10

您需要使用X而不是Z

SimpleDateFormat mdyFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSX");

有关更多信息,请参阅javadoc

注意:仅在 Java 7+ 中可用。

于 2014-04-01T10:41:52.200 回答
5

如果您在 Java 8 中使用新的 JSR 310 日期/时间 API,则可以使用该XXX格式来解析时区。您需要三个Xs 来获取您正在使用的特定冒号分隔的偏移量。

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSXXX");
TemporalAccessor dateTime = formatter.parse("2014-04-01 15:19:49.31146+05:30");
// returns: {OffsetSeconds=19800},ISO resolved to 2014-04-01T15:19:49.311460
于 2014-04-01T10:48:29.567 回答