我正在尝试使用JDBC将java.util.Date从应用程序保存到SQL Server数据库中。

当我使用以下方法将java.util.Date转换为java.sql.Date时,它会截断时间部分。

java.sql.Date javaSqlExpiryDate = new java.sql.Date(javaUtilExpiryDate.getTime());
System.out.println("javaUtilExpiryDate: " + javaUtilExpiryDate.toString());
System.out.println("javaSqlExpiryDate: " + javaSqlExpiryDate.toString());


控制台窗口将输出报告为:


  javaUtilExpiryDate:2016年9月1日星期四18:19:08
  
  javaSqlExpiryDate:2016-09-01


我又如何保留时间呢?

最佳答案

是的,这是预期的行为并已记录在案。

Quote from the JavaDocs


  为了符合SQL DATE的定义,必须通过将与实例相关联的特定时区中的小时,分​​钟,秒和毫秒设置为零,来“标准化” java.sql.Date实例包装的毫秒值。 。


如果要节省时间,则需要使用java.sql.Timestamp(尤其是如果数据库中的列定义为datetime)。

10-06 13:52