我试图以特定格式将日期插入到SQL表中。我已成功将日期插入datetime
类型的列中,但格式不正确。
我有以下内容:
TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
df.setTimeZone(tz);
String timeString = df.format(System.currentTimeMillis());
Date date = df.parse(timeString);
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
我可以看到timeString
正确设置为字符串,如:“2017-01-11 18:19:06.662
”
但是将日期设置为:“Wed Jan 11 13:19:06 EST 2017
”(缺少毫秒数)
和sqlDate
设置为“2017-01-11
”
当我查看表格以查看值是什么时,我发现对于我正在设置的字段,我看到datetime
设置为“2017-01-11 00:00:00.000
”。< / p>
现在缺少所有时间信息,我确信这与sqlDate
设置为没有时间的值的事实有关,但我不确定为什么sql date没有时间值。我查看了一些尝试处理相同内容的旧帖子,但未找到解决方案here或here。
对于为什么会发生这种情况的建议表示赞赏。
答案 0 :(得分:3)
您的代码似乎是正确的,您只会因toString
:
java.util.Date
dow mon dd hh:mm:ss zzz yyyy
中,其中的日期为java.sql.Date
。yyyy-mm-dd
getTime()
中,其中的日期为date
。但是,如果您比较sqlDate
和df.format
的{{1}}返回值,您将获得与最初提供给timeString
的{{1}}相同的值{1}}。
你的错误更多的是你使用java.sql.Date
作为日期时间,因为正如javadoc所述:
符合
SQL DATE
的定义,即毫秒值 由java.sql.Date
个实例包装必须&#39;规范化&#39;通过设置 小时,分钟,秒和毫秒为零 与实例关联的特定时区。
您应该使用java.sql.Timestamp
代替java.sql.Date
来保持您的日期时间(小时,分钟,秒和毫秒)。
您的代码应为:
...
java.sql.Timestamp sqlDate = new java.sql.Timestamp(date.getTime());