SimpleDateFormat无法解析并返回null

时间:2014-05-30 08:19:09

标签: java java-7 simpledateformat date-parsing

我收到SimpleDateFormat返回的null。但我觉得我已经做好了一切。

以下是我的代码段

format = new SimpleDateFormat("yyyy-dd-MM'T'H:mm:ss'Z'", Locale.US);
format.setLenient(true);
ParsePosition pos = new ParsePosition(0);

String timeStr = "2013-10-05T01:21:07Z";
System.out.println(format.format(new Date()));
System.out.println(timeStr);

Date d = format.parse(timeStr,pos);
d.getTime();

提供输出

2014-30-05T13:43:05Z
2013-10-05T01:21:07Z
Exception in thread "main" java.lang.NullPointerException

我已尝试过本论坛其他帖子中提到的几个选项。但我仍然得到错误。我忽略了一些微不足道的事情吗?

1 个答案:

答案 0 :(得分:0)

虽然您可能认为现在根据上面的评论你的代码都可以,但我会说,没有什么是好的。

  1. 再看看你的模式。可能你想要一个ISO-8601兼容的模式。然而,这有点不同:“yyyy-MM-dd'T'HH:mm:ssXXX”(适用于Java 7)您似乎已经改变了月和日的位置!

  2. Z不仅仅是ISO字符串中的文字。它代表时区UTC(祖鲁时间),但您使用系统时区解析字符串(因为您没有在格式对象上明确设置时区),这可能完全不同。正确的解决方案是使用Java 7中引入的模式符号X.如果您仍然使用较旧的Java版本,那么您可以转义Z(就像您所做的那样),但必须将格式对象的时区设置为“GMT”。 否则您会毫无例外地得到错误的结果。