0

我正在尝试使用 joda time 解析日期字符串,不幸的是我找不到解析时区的方法。

这是我最近的尝试:

String s = "2013-09-20 13:23:50 Etc/GMT";
DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss ZZZ").parseDateTime(s)

结果是

java.lang.IllegalArgumentException: Invalid format: "2013-09-20 13:23:50 Etc/GMT" is malformed at "Etc/GMT"

我的模式中的错误在哪里?

4

2 回答 2

4

您应该使用Joda-Time带有版本2.0或更高版本的库。
此功能是在版本中添加的2
请参阅发行说明 1.6 -> 2.0。

  • 允许格式模式中的“Z”和“ZZ”将“Z”解析为“+00:00”[2827359]

  • 支持解析欧洲/伦敦等日期时区 ID

  • 支持解析日期时区名称,例如“EST”和“British Summer Time”这些名称不是唯一的,因此构建器上的新 API 方法要求您传入一个地图,列出您希望能够解析的所有名称. 现有方法未更改且不允许解析。

于 2013-10-02T19:56:51.980 回答
2

要使用时区解析日期时间字符串,您可以使用 next for [Java]:

new DateTimeFormatterBuilder()
      // z is timezone name
      .appendPattern("yyyy-MM-dd HH:mm:ss z") 
      // special map to map names to time zones
      .appendTimeZoneName(new HashMap() {{
          put("UTC", DateTimeZone.UTC);
      }}) 
      .toParser

或 [斯卡拉]

new DateTimeFormatterBuilder()
      .appendPattern("yyyy-MM-dd HH:mm:ss z")
      .appendTimeZoneName(Map("UTC" -> DateTimeZone.UTC))
      .toParser
于 2014-08-14T16:20:10.613 回答