【问题标题】:SimpleDateFormat fails to parse and returns nullSimpleDateFormat 解析失败并返回 null
【发布时间】:2014-05-30 08:19:09
【问题描述】:

SimpleDateFormat 返回一个空值。但我觉得我做的一切都是正确的。

下面是我的代码sn-p

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

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

【问题讨论】:

  • NullPointer@哪一行???
  • 你需要在这里发布完整的堆栈跟踪
  • 上面的代码没有得到 Nullpointer...你到底指向哪里?
  • 在第一行前面添加一个System.out.println(d);(和一个SimpleDateFormat)我得到了一个Fri May 10 01:21:07 CEST 2013
  • @AnkitLamba 得到代码'd.getTime()'的空指针

标签: java java-7 simpledateformat date-parsing


【解决方案1】:

尽管根据上面的 cmets,您现在可能认为您的代码一切正常,但我想说,一切都不好。

  1. 再次查看您的模式。可能您想要一个与 ISO-8601 兼容的模式。但是,这略有不同:“yyyy-MM-dd'T'HH:mm:ssXXX”(适用于 Java 7)您似乎更改了月份和日期的位置!

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

【讨论】:

    猜你喜欢
    • 2013-03-29
    • 2012-10-26
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多