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

时间:2013-02-07 02:41:46

标签: java string date simpledateformat

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

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

2月24日星期五16:45:40太平洋标准时间2012 - >变为 - > 1月06日星期五16:45:40太平洋标准时间2012年

Wed Jun 13 10:00:42 PDT 2012 - >变为 - > Wed Jan 04 09:00:42 PST 2012

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

提前致谢!

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

<%@ page import="java.util.*" %>
<%@ page import="java.net.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.text.*" %>

<%
String dateStr = "";
Date tmpDate = null;
DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z YYYY");

System.out.println("First Test ---------------");
dateStr = "Fri Feb 24 16:45:40 PST 2012";
tmpDate = (Date) formatter.parse(dateStr);
System.out.println("Original:"+dateStr+":");
System.out.println("Date Obj:"+tmpDate.toString()+":");

System.out.println("Second Test --------------");
dateStr = "Wed Jun 13 10:00:42 PDT 2012";
tmpDate = (Date) formatter.parse(dateStr);
System.out.println("Original:"+dateStr+":");
System.out.println("Date Obj:"+tmpDate.toString()+":");

%>

我得到以下输出:

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:

2 个答案:

答案 0 :(得分:8)

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

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

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

答案 1 :(得分:3)

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

我怀疑错误的结果是因为你还指定了月份和日期,这些并不是本周的“功能”。当你使用星期时,你会指定“星期一周”和“星期几”,它可能会给出更明智的结果,但显然你并不打算使用一周。

我建议您在代码中指定您的区域设置。当然它会在您的机器上完美运行,但它可能会在中国等其他地方引起unparsable date exception

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