【问题标题】:Issue with SimpleDateFormat parsing date generated by strftime [closed]由 strftime 生成的 SimpleDateFormat 解析日期问题[关闭]
【发布时间】:2013-06-09 04:51:27
【问题描述】:

我有一个时间戳字符串 2013-03-01T11:22:18.01Zstrftime("%Y:%m:%dT%H:%M:%SZ")生成,在Python中。

现在我正在尝试使用 Java 的 SimpleDateFormat 来解析这个时间戳。我发现的很多示例代码似乎都是这样做的:

String DATE_FORMAT = "YYYY-MM-DD'T'hh:mm:ss.ssZ"
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT)
sdf.setLenient(false)
sdf.parse(timestamp) <---- throws ParseException here

但是,我收到一个错误对话框,上面写着 Unparseable date: "2013-03-01T11:22:18.01Z"

我一直在这里和那里调整DATE_FORMAT,尝试了各种各样的事情,但我已经被困在同一个障碍上很长一段时间了。看来我需要在这方面借用 stackoverflow 社区的力量。

【问题讨论】:

  • 阅读 javadoc Si​​mpleDateFormat patterns.
  • 应该是yyyy,而不是YYYY,和dd,而不是DD。还有HH 而不是hh 等等——就像提到的那样,去看看javadoc。

标签: java python timestamp simpledateformat strftime


【解决方案1】:

除了yyyyYYYYddDD 之外,Z 也会导致问题。您的 SimpleDateFormat 带有类似

的模式
yyyy-MM-dd'T'HH:mm:ss.ssZ
 |   |  |  | |  |  |  | |
 |   |  |  | |  |  |  | -----timezone (RFC 822 time zone, ex: -0800)
 |   |  |  | |  |  |  -------seconds again (maybe you wanted SS for milliseconds)
 |   |  |  | |  |  ----------seconds (0-59)
 |   |  |  | |  -------------minutes (0-59)
 |   |  |  | ----------------hours (0-23)
 |   |  |  ------------------the character T
 |   |  ---------------------day in month 
 |   ------------------------month in year
 ----------------------------year

但是您传递的字符串 "2013-03-01T11:22:18.01Z" 只是在末尾有一个 Z,而不是时区。

如果您实际上希望在末尾出现Z,那么您需要在格式字符串中引用它:

yyyy-MM-dd'T'HH:mm:ss.ss'Z'

就像您为 T 所做的那样。来自javadoc

可以使用单引号 (') 对文本进行引用以避免解释。

【讨论】:

  • 点后的ss 应该是SS(微秒)
  • @fge 确实应该。
【解决方案2】:

1) 2013-03-01T11:22:18.01 的正确模式是 "yyyy-MM-dd'T'HH:mm:ss.SSS"(如果 .01 是毫秒)

2) 2013-03-01T11:22:18.01Z 中的 Z 时区无法由仅接受 -0800 格式 (RFC 822) 的 SimpleDateFormat 'Z' 解析。即使您将其更改为“z”(通用时区),它仍然不会解析 Z,它应该是 GMT

请参阅 SimpleDateFormat API。

3) 2013-03-01T11:22:18.01Z 看起来非常像 XSD dateTime 格式 http://www.schemacentral.com/sc/xsd/t-xsd_dateTime.html 并且可以使用 java.xml.bind 包(Java 标准库)中的 DatatypeConverter.parseDateTime 进行解析

【讨论】:

  • 谢谢!我刚刚尝试了你的建议,但它仍然给出了同样的错误。
  • 现在可以了!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 2013-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多