java - 从 Java 将日期插入 SQL Server - 格式不正确

标签 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".

现在缺少所有时间信息,我确定这与 sqlDate 被设置为没有时间的值有关,但我不确定为什么 sql date 有没有时间值(value)。我查看了一些尝试处理相同问题的旧帖子,但没有找到解决方案 herehere .

欢迎提供关于为什么会发生这种情况的建议。

最佳答案

你的代码似乎是正确的,你只是因为 toString 的实现而感到困惑:

  1. java.util.Date 中,它以 dow mon dd hh:mm:ss zzz yyyy 的形式提供日期。
  2. java.sql.Date 中,它以 yyyy-mm-dd 的形式提供日期。

但是,如果您比较 getTime() 为两者(datesqlDate)返回的值,您将获得与您返回的值相同的值最初提供给df.format以获取timeString


您的错误更多是您将 java.sql.Date 用作日期时间,因为如 javadoc 中所述:

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而不是 java.sql.Date 来保持日期的时间部分(小时、分钟、秒和毫秒),正如您所期望的那样。

你的代码应该是:

...
java.sql.Timestamp sqlDate = new java.sql.Timestamp(date.getTime());

关于java - 从 Java 将日期插入 SQL Server - 格式不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41598393/

相关文章:

sql-server - SQL 计算列规范中的 if 语句

python - 在 Python Pandas 中创建新的 QuarterEnd 列

javascript - 获取年、月、日中 2 个日期的差异,但答案总是相差几天/几个月

java - 用java程序创建Eclipse java项目

sql - 在 SQL Server 中使用带有 IN 子句的 uniqueidentifier

java - 如何使用 Spring MVC 更新我当前的用户数据?

c# - 生产环境中无法解释的 SQL 错误 - 可能与网络有关

c++ - 生成随机日期

java - 我可以有多个只为它们所属的组运行的@BeforeMethod 吗?

java - 使用java在sqlite中存储目录树