我正在尝试使用以下代码将一串文本转换为日期:
//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”
为了正确解析这个日期,我的格式如何更改?
答案 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包装器。它为您提供了一些构建日期解析器的更好的工具,如果您只是使用默认解析器而不指定任何格式字符串,它通常会做正确的事情。