[英]Java SimpleDateFormat parsing irregularities
我正在用Java执行一些日期解析,并且遇到了一些奇怪的行为。
我有一个日期字符串,如下所示:
String s = "Sun Aug 11 2013 11:00:00 -0700 (Pacific Daylight Time)"
我正在尝试将其解析为一个日期对象,如下所示:
SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss Z (zzzz)");
然后,我从sdf.parse(s)
打印出结果日期对象并得到:
Sun Aug 11 12:00:00 CDT 2013
我在中央时区,因此按原样打印它是有道理的,但是CDT是-0500,所以解析的日期应该是13:00,而不是12:00。
奇怪的是,如果我删除了多余的时区信息之一,则日期将正确解析。 使用格式"EEE MMM dd yyyy HH:mm:ss Z ('Pacific Daylight Time')"
或格式"EEE MMM dd yyyy HH:mm:ss '-0700' (zzzz)"
得出正确的日期:
Sun Aug 11 13:00:00 CDT 2013
此行为似乎只发生在夏时制时间之内的日期。 如果我改用初始日期格式来分析某个日期(例如12月),则会得到正确的结果。
我对要解析的日期格式的控制有限,它们可能来自多个时区。 以前有没有人遇到过这种现象,是否有办法在不更改日期字符串格式的情况下解决该问题? 我意识到时区的指定是多余的,但据我所知,它们并不是错误的。
过去,Java在处理夏时制和时区时确实存在一些错误,而且这肯定看起来像您发现的那样。 这是什么版本的Java?
您可能想尝试给Joda-Time一个尝试,看看它是否可以正确处理给定的日期。
如果Joda没有帮助,您可能需要尝试预先准备一些日期字符串以删除括号中的描述性时区,因为只有定义了一个时,它才起作用。 确实很奇怪!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.