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

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)

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

2个回答

11

你需要使用X代替Z

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

查看javadoc以获取更多信息。

注意:仅适用于Java 7+。


非常感谢!它正在工作。我想我看的是旧版本的文档。 - Karthik

5

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接