从Java将日期插入SQL服务器 - 不正确格式化

时间:2017-01-11 18:44:13

标签: java sql-server date datetime

我试图以特定格式将日期插入到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没有时间值。我查看了一些尝试处理相同内容的旧帖子,但未找到解决方案herehere

对于为什么会发生这种情况的建议表示赞赏。

1 个答案:

答案 0 :(得分:3)

您的代码似乎是正确的,您只会因toString

的实施而感到困惑
  1. java.util.Date dow mon dd hh:mm:ss zzz yyyy中,其中的日期为java.sql.Date
  2. yyyy-mm-dd getTime()中,其中的日期为date
  3. 但是,如果您比较sqlDatedf.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());