无法使用 SimpleDateFormat 解析带有区域信息的日期
Can't parse date with zone information using 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 的选项,或者我是否需要将其更改为其他格式?
要匹配 "01-02-2016T10:00:00+01:00"
,您的格式字符串应为 "dd-MM-yyyy'T'HH:mm:ssXXX"
。你有 zzz
而你应该有 XXX
。见 javadoc.
此外,这是一种使用起来很奇怪的格式。通常,当看到日期和时间部分之间的 T
分隔符时,它表示 ISO8601 format (or an ISO8601-based format such as RFC3339)。但是,在该格式中,日期按 year-month-day 顺序排列。您有 day-month-year 个订单。这种矛盾在某些时候肯定会引起混乱。我强烈建议更改此数据的来源以使用正确的顺序,或将 T
替换为 space,并在 tz 偏移量之前放置一个 space。
换句话说,您的数据应如下所示:
"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
我有
格式: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 的选项,或者我是否需要将其更改为其他格式?
要匹配 "01-02-2016T10:00:00+01:00"
,您的格式字符串应为 "dd-MM-yyyy'T'HH:mm:ssXXX"
。你有 zzz
而你应该有 XXX
。见 javadoc.
此外,这是一种使用起来很奇怪的格式。通常,当看到日期和时间部分之间的 T
分隔符时,它表示 ISO8601 format (or an ISO8601-based format such as RFC3339)。但是,在该格式中,日期按 year-month-day 顺序排列。您有 day-month-year 个订单。这种矛盾在某些时候肯定会引起混乱。我强烈建议更改此数据的来源以使用正确的顺序,或将 T
替换为 space,并在 tz 偏移量之前放置一个 space。
换句话说,您的数据应如下所示:
"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