无法使用SimpleDateFormat

时间:2017-02-06 12:41:40

标签: timezone simpledateformat

我有

格式:dd-MM-yyyy'T'HH:mm:sszzz

区域设置:en_US

日期:01-02-2016T10:00:00+01:00

zoneId:Europe/Warsaw

我打来电话:

new SimpleDateFormat(format, locale).parse(date).toInstant().atZone(zoneId)

我得到Unparseable date: "01-02-2016T10:00:00+01:00"

是否有使用SimpleDateFormat的选项,还是需要将其更改为其他内容?

1 个答案:

答案 0 :(得分:1)

要匹配"01-02-2016T10:00:00+01:00",您的格式字符串应为"dd-MM-yyyy'T'HH:mm:ssXXX"。您有zzz,您应该XXX。请参阅javadoc

此外,这是一种非常奇怪的格式。通常,当人们在日期和时间部分之间看到T分隔符时,它会指示ISO8601格式(或基于ISO8601的格式,例如RFC3339)。但是,在该格式中,日期为年 - 月 - 日订单。你有一个月 - 月的订单。这种矛盾肯定会在某些时候造成混乱。我强烈建议您更改此数据的来源以使用正确的顺序,或者用空格替换T,并在tz偏移之前放置一个空格。

换句话说,您的数据应如下所示:

"01-02-2016 10:00:00 +01:00"  // Human-readable, but locale-specfic

"2016-02-01T10:00:00+01:00"   // ISO8601 / RFC3339 compliant

不是

"01-02-2016T10:00:00+01:00"   // Nonsense