7

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

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

2012 年 2 月 24 日星期五 16:45:40 PST --> 更改为 --> 2012 年 1 月 6 日星期五 16:45:40 PST

2012 年 6 月 13 日星期三 10:00:42 PDT --> 更改为 --> 2012 年 1 月 4 日星期三 09:00:42 PST

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

提前致谢!

您可以使用以下 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:
4

2 回答 2

8

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

YYYY是个很特别的东西,日历周年。

有关更多信息,请参阅SimpleDateFormat文档。

于 2013-02-07T02:44:57.077 回答
3

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

我怀疑出现了错误的结果,因为您还指定了月份和日期,这在一周年中并不是真正的“功能”。当您使用星期年份时,您会指定“星期几”和“星期几”,它可能会给出一些更合理的结果,但显然您并不是真的打算使用星期年份。

我建议您在代码中指定您的语言环境。当然它会在你的机器上完美运行,但它可能会在中国等其他地方导致无法解析的日期异常。

DateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
于 2013-02-07T03:30:05.393 回答