2011-12-16 60 views
15

當我插入SQL DateTime到數據庫中,我得到2007-02-07 12:00:00.00的Java SQL日期時間

但我所做的Date對象是這樣的:2007-02-07 17:29:46.00

如何在數據庫中保存秒的值。它始終將其更改回12:00:00.00

date.setYear(Integer.valueOf(parsedDate[2].replaceAll(" ", "")) - 1900); 
date.setMonth(Integer.valueOf(parsedDate[0].replaceAll(" ", ""))); 
date.setDate(Integer.valueOf(parsedDate[1].replaceAll(" ", ""))); 
... 
java.sql.Date sqlDate = new java.sql.Date(date.getTime()); 

我應該使用任何格式化程序嗎?

+0

A「日期」(代表在某個時間點的數)是獨立於它的格式(在相同* *號可以被表示爲「2007-02-07」或「2007-07-02」或「2/7/2007「,它也與您的時區無關(相同的數字可以在洛杉磯」2007年2月7日「,倫敦的」2/8/2007「),最後是」日期「(例如」2/7/2007「)與日期時間有不同的值(例如」2007年2月7日上午09:15「)。我的猜測是,你可能使用」日期「,你的意思是使用」日期時間「 – paulsm4 2011-12-16 06:34:34

+0

PS:java.util.date表示「date」或「datetime」,java.sql.date只是「date」,對於MS Sql Server等數據庫,「date」或「datetime」與「timestamp」不同。 http://stackoverflow.com/questions/2305973/java-util-date-vs-java-sql-date – paulsm4 2011-12-16 06:50:52

回答

29

java.sql.Date代表日期,而不是日期和時間。從the docs

To conform with the definition of SQL DATE, the millisecond values wrapped by a java.sql.Date instance must be 'normalized' by setting the hours, minutes, seconds, and milliseconds to zero in the particular time zone with which the instance is associated.

如果你想存儲日期和時間,你應該尋找另一種類型 - 例如java.sql.Timestamp。編輯:這並不是建議你使用TIMESTAMP列類型 - 正如paulsm4在評論中所說的那樣,這是另一回事。然而,據我所看到的,JDBC只支持:

  • Date(不,你想有一個時間太長)
  • Time(不,你想約會過)
  • Timestamp(包括日期和時間,但你不想TIMESTAMP SQL語義)

期望使用Java Timestamp類型與DATETIME列工作,儘管沒有精確的水平Timestamp規定。

編輯:更多的研究後,它看起來像你可能要使用java.sql.Time類型,但與專門的驅動參數 - 至少如果你正在使用微軟的驅動程序。有關更多信息,請參閱configuring JDBC上的這些文檔。