2014-10-05 60 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