我有
格式: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的选项,还是需要将其更改为其他内容?
答案 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