String中的Java Date对象无法正常工作

我遇到了一个我似乎无法解决的顽固问题。 我已经在stackoverflow上寻找解决方案并找到了很多关于Java日期格式的post,但没有具体的问题。

基本上,我有一种情况,我需要将日期字符串转换为java.util.Date对象。 我正在使用Date和SimpleDateFormat类。 对于我遇到的大多数日期,它的工作正常。 但是对于某些日期,它可以工作,但会改变实际日期。 两个示例日期是:

2月24日星期五16:45:40太平洋标准时间 – >更改为 – >星期五06月16日16:45:40太平洋标准时间2012年

2012年1月13日星期三10:00:42 – >更改为 – > Wed Jan 04 09:00:42 PST 2012

知道为什么日期会发生变化吗? 有什么方法可以轻松避免这种情况或以不同的方式做到这一点? 我的代码复制如下。 你可以尝试看看我在说什么。

提前致谢!

您可以使用以下JSP代码尝试此操作:

     

我得到以下输出:

 First Test ------------ Original:Fri Feb 24 16:45:40 PST 2012: Date Obj:Fri Jan 06 16:45:40 PST 2012: Second Test ----------- Original:Wed Jun 13 10:00:42 PDT 2012: Date Obj:Wed Jan 04 09:00:42 PST 2012: 

在格式字符串中使用yyyy而不是YYYY。

YYYY是一个非常特别的东西,日历周年。

有关详细信息,请参阅SimpleDateFormat文档。

您在格式说明符中使用YYYY,即年 (请参阅SimpleDateFormat )。 你需要yyyy,这只是“年”。

我怀疑错误的结果是因为你还指定了月份和日期,这在一周中并不是真正的“function”。 当你使用星期时,你会指定“星期一周”和“星期几”,它可能会给出一些更明智的结果,但显然你并没有真正想要使用一周。

我建议您在代码中指定您的Locale。 当然它会在您的机器上完美运行,但它可能会导致像中国这样的其他地方出现无法解决的日期exception 。

 DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);