【发布时间】:2017-12-17 19:18:45
【问题描述】:
我目前为BigSense 开发,我们支持三种数据库后端:MySQL、Postgres 和 MS SQL。最近我在编写测试用例时遇到了一个有趣的时间/查询问题。
给定以下 UNIX 时间戳:1499839328918
并给出以下数据类型:
MySQL: DATETIME(6)
Postgres: TIMESTAMP WITHOUT TIME ZONE
Microsoft SQL: DATETIME
我使用以下函数将 UNIX 时间戳转换为 java.sql.Timestamp
def timestampToDate(unixTimeStamp: String) : java.sql.Timestamp = new java.sql.Timestamp(unixTimeStamp.toLong)
在 Scala REPL 中,这似乎给了我以下日期:
scala> timestampToDate("1499839328918")
res0: java.sql.Timestamp = 2017-07-12 06:02:08.918
但是,当我执行 INSERT 和 SELECT 时,Postgres/MySQL 会给我上述正确的时间,但是使用 Microsoft SQL,我得到以下信息:2017-07-12 06:02:08.917
所以它会延迟 1/100 秒,通常我不会在意,但我希望我的自动化测试能够通过,而不必捏造时间戳的 100 秒位置。我已经尝试了其他几个时间戳,它们似乎都不适用于 MS SQL。这里发生了什么?是 Microsoft JDBC 驱动程序的问题还是 MS SQL 做了奇怪的时间戳舍入?
编辑我正在使用"net.sourceforge.jtds" % "jtds" % "1.3.1",
【问题讨论】:
-
它似乎关闭了将近 7 个小时?
-
嗯,你是对的。我只是在看毫秒,并没有注意到时间已经过去了。我会进一步调查/谢谢。
-
所有服务器的时区是否相同?或者可能是触发器?
-
@ScaryWombat 原来我从错误的窗口复制/粘贴。更新了时间戳。
-
你真的需要毫秒精度吗?作为一个软糖,你可以精确到一秒 - 如果@ugo 是正确的
标签: java sql-server scala timestamp unix-timestamp