2011-12-16 71 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上的这些文档。