Java解析字符串到日期返回不正确的日期

时间:2013-05-31 09:50:48

标签: java jdbc

我将2个Java日期类型存储为MySQL数据库表的日期和时间。我使用SimepleDateFormat("YYYY-MM-dd")将日期存储在我的数据库中,当我选择它时,它显示为正确的日期。但是,当我尝试将其解析回util.Date并创建一个新的Event对象时,它显示为30/12/2012而不是31/05/2013,因为它在数据库中。解析为util.Date并格式化的时间正确打印出来的时间。我不确定为什么日期打印错误的日期,但是时间正在打印正确的时间。

数据库

+--------+--------------+-----------+
+ EVENT1 +  2013-05-31  +  02:30:00 +
+--------+--------------+-----------+
+ EVENT2 +  2013-05-31  +  01:00:00 +
+--------+--------------+-----------+

打印:

Event1
30/12/2012
02:30
Event2
30/12/2012
01:00

5 个答案:

答案 0 :(得分:4)

{Y}应为yyyy-MM-dd。在这里看看资本Y的含义......

Y returns 2012 while y returns 2011 in SimpleDateFormat

答案 1 :(得分:1)

你的模式错了。 (mm!= MM,yyyy!= YYYY ......)

查看http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

答案 2 :(得分:0)

正确的方法是rs.getDate(int)。看一眼 http://docs.oracle.com/javase/6/docs/api/java/sql/ResultSet.html#getDate(int)

使用该方法,您会获得java.sql.Date,如果您想将其转换为java.util.Date,请查看此Converting java.sql.Date to java.util.Date

你甚至可以这样做

Date date =  rs.getTimestamp(2);

顺便说一下,最好让你的日期对象独立于你想用来显示它的格式。

答案 3 :(得分:0)

String testDate = "2007-11-02T14:46:03";
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date date = formatter.parse(testDate);

但更好的存储方式是使用时间戳而不是分别存储日期和时间

答案 4 :(得分:-1)

试试这个......

SimpleDateFormat dateFormat = new SimpleDateFormat("YYYY-MM-dd");   
Date date =  dateFormat.parse(rs.getDate(2).toString());