2014-10-05 33 views
1

请看看下面的代码无效的日期被保存在MySQL

SimpleDateFormat format = new SimpleDateFormat("dd-mm-yyyy"); 
Date parse = format.parse("05-10-2014"); 
java.sql.Date sqlDate = new java.sql.Date(parse.getTime()); 

输出“应为” 05-10-2014,但我得到的输出作为2014-01-05。这里有什么问题?

即使我将sqlDate保存在数据库中,它仍然保存为2014-01-05

UPDATE

我改变了dd-mm-yyyydd-MM-yyyy。现在,MySQL的将其保存为2014-05-10

+1

10到01的变化是一个错字?或者它真的在改变日期而不仅仅是格式? – Vertig0 2014-10-05 06:29:31

+0

它真的在变化。 – 2014-10-05 06:33:06

+0

@ Vertig0:不是Typo。它由自己改变。 – 2014-10-05 06:34:16

回答

4

如果你担心你的日期的格式,该java.sql.DatetoString()方法,这就是所谓的它,当你println的一个,always格式化日期为yyyy-mm-dd

如果要以更受控制的方式格式化日期,则在输出时可以使用DateFormat

然而,真正问题就在这里(坏数据)是你使用小写m这是“以小时,分钟”,而不是“月年”格式字符。详细请参阅SimpleDateFormat页:

Letter Date or Time Component Presentation Examples 
------ ---------------------- ------------ -------- 
    M  Month in year   Month   July; Jul; 07 
    m  Minute in hour   Number  30 

在上面的第二个链接,为pards()说明有这个小片断:

此分析操作使用日历制作日期。在解析之前,所有日历的日期时间字段都会被清除,日历时间字段的默认值将用于任何缺少的日期时间信息。

由于为Calendar的默认值是1970年1月1日,你只设置一天,分钟和年份,你结束了2014年的1月5日,(八分钟过去午夜),假设UTC 。

更改格式字符串为"dd-MM-yyyy"应该解决当前的问题。

+0

但是'sqlDate'由它自己被保存在数据库中(这意味着'SQL日期'的格式)就像'2014-01-05' – 2014-10-05 06:30:16

+0

我没有问题触发器和失败的更新,没有这样的。 – 2014-10-05 06:36:38

+0

现在的答案是'2014-05-10' – 2014-10-05 06:47:57