如何正确解析此特定日期?

时间:2015-02-06 10:17:25

标签: java date date-format simpledateformat

我无法为我的日期找到正确且干净的工作解决方案,其格式如下:

  

2014-06-09T00:01 + 0200

(6月9日在这里)

最后我试过这个:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmXXX", Locale.ENGLISH);

这只是给了我一个不可解释的日期例外。你认为我应该改变什么?

3 个答案:

答案 0 :(得分:3)

XXX替换为Z

String dateTimestr = "2014-06-09T00:01+0200";
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
s.parse(dateTimestr);

打印,

System.out.println(s.format(s.parse(dateTimestr)));

使用Java 8,

OffsetDateTime dateTime = OffsetDateTime.parse("2014-06-09T00:01+02:00");
System.out.println(dateTime.toString());

请注意OffsetDateTime.parse只有在您的字符串是正确的ISO8601日期格式时才有效。如果您的日期格式不同,则必须使用OffsetDateTime.parse()DateTimeFormatter提供正确的格式化程序。即

OffsetDateTime.parse(yourStringDate, DateTimeFormatter formatter)

答案 1 :(得分:2)

使用Z代替XXXX

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ", Locale.ENGLISH);

来自documentation

  

Z时区RFC 822时区-0800

     

X时区ISO 8601时区-08; -0800; -08:00

答案 2 :(得分:0)

问题是XXX需要带冒号的时区格式,即2014-06-09T00:01 + 02:00

使用Z代替XXX或使用XX(2 X)应该接受不带冒号的格式

小心使用一个X,因为这会忽略时区的最后两位数字(例如,2014-06-09T00:01 + 02)。如果在一些国家(如印度,时区偏移为+05:30)处理时区,则可能会出现问题。请注意以下代码..

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mmXXX").format(new SimpleDateFormat("yyyy-MM-dd'T'HH:mmX").parse("2014-06-09T00:01+05:30")));

将打印2014-06-08T14:01-05:00。使用一个X时,时区中的30个丢失了。Documentation