在java中解析带时区的时间戳?

我正在尝试使用从DB获取的时区解析一串格式时间戳。 字符串如下:

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) 

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

你需要使用X而不是Z

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

有关更多信息,请参阅javadoc 。

注意:仅适用于Java 7+。

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

 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