如何正确解析时区的日期?

时间:2014-01-26 12:19:17

标签: scala parsing date simpledateformat

我正在尝试使用以下代码将一串文本转换为日期:

//Input String
str = "14/01/26,12:13:13+00"

//Format
format = new java.text.SimpleDateFormat("yy/MM/dd,HH:mm:ssz")

//Conversion
format.parse(str)

但我获得了以下内容:

  

例外:无法解释的日期:“14/01 / 26,12:13:13 + 00”

为了正确解析这个日期,我的格式如何更改?

2 个答案:

答案 0 :(得分:8)

+00是无效的时区。它应该是+0000

您可以将00添加到str,并将z替换为Z模式,以使用RFC 822 time zone格式:

new java.text.SimpleDateFormat("yy/MM/dd,HH:mm:ssZ").parse(str + "00")
// java.util.Date = Sun Jan 26 16:13:13 MSK 2014

java.util.Date(和java.text.SimpleDateFormat)不是项目的最佳选择。有关详细信息,请参阅this answer

来自DateTimeFormat的奖励Joda-Time可让您无需修改​​即可解析str

// I'm using the same pattern with `Z` here
DateTimeFormat.forPattern("yy/MM/dd,HH:mm:ssZ").parseDateTime(str)
// org.joda.time.DateTime = 2014-01-26T16:13:13.000+04:00

答案 1 :(得分:3)

如果您正在寻找“正确性”,那么不要使用SimpleDateFormat

首先,它不是线程安全的...而且默默地不安全,你最终会得到损坏的日期并且不会抛出任何错误。当您使用Scala时,可以肯定的是,并发编程和线程安全将适用于您。

使用JodaTime,也许使用其中一个Scala包装器。它为您提供了一些构建日期解析器的更好的工具,如果您只是使用默认解析器而不指定任何格式字符串,它通常会做正确的事情。