转换时间戳字符串时获取Unparseable日期异常

时间:2016-05-03 06:19:51

标签: java timestamp-with-timezone

我正在尝试使用Java中的时区字符串解析时间戳。我的字符串是:

"2013-01-01 15:30:00.2 +05:00"
"2003-01-01 02:59:04.123 -8:00"

这是我解析它的代码:

SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");
simpleDateFormat.parse("2013-01-01 15:30:00.2 +05:00");

但是,当我运行代码时,我收到此错误消息:

java.text.ParseException: Unparseable date: "2013-01-01 15:30:00.2 +05:00"

我也尝试使用以下代码来解析它:

DateTimeFormatter dateTimeFormatter = ISODateTimeFormat.dateTimeNoMillis();
DateTime dateTime = dateTimeFormatter.parseDateTime("2003-01-01 02:59:04.123 -8:00");
Timestamp timeStamp = new Timestamp(dateTime.getMillis());

这给了我例外:

Invalid format: "2003-01-01 02:59:04.123 -8:00" is malformed at " 02:59:04.123 -8:00"

我还尝试在日期之后在字符串中插入'T',但它也提供了无效的格式异常:

 Invalid format: "2003-01-01T02:59:04.123 -8:00" is malformed at " .123 -8:00"

这一定非常简单 - 我不知道我哪里出错了。

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

你只是在SimpleDateFormat中犯了一个错误(yyyy-MM-dd HH:mm:ss.SSS z ), 哪里' z'接受带有常规时区演示文稿的TimeZone。一般时区接受:

GMTOffsetTimeZone:

GMT Sign Hours : Minutes
Sign: one of
         + -
 Hours:
         Digit
         Digit Digit
 Minutes:
         Digit Digit
 Digit: one of
         0 1 2 3 4 5 6 7 8 9

但是你提到+5:00应该是GMT + 5:00。

还有' Z' ' X' 来代表SimpleDateFormat中的TimeZone,它接受RFC 822 time zone和分别为ISO 8601 time zone

答案 1 :(得分:0)

尝试下面的代码:只需输入GMT + 5:30而不是+5:30

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateDemo {

    // main method
    public static void main(String[] args) {

        try {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");
            Date d = simpleDateFormat.parse("2013-01-01 15:30:00.2 GMT+05:00");
            System.out.println(d);
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}