gpt4 book ai didi

java - UNIX 时间戳到日期时间与 MS SQL 不一致

转载 作者:行者123 更新时间:2023-12-02 12:38:02 25 4
gpt4 key购买 nike

我目前正在为 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”,

最佳答案

据我所知,MsSQL DATETIME 数据类型有一个奇怪的分辨率,因为毫秒四舍五入为 0、3 或 7,所以看来您遇到了其中一种情况。
您可能想要使用 DATETIME2 数据类型(我猜是从 SqLServer2008 开始),其分辨率为 100ns。
而小时差异应取决于服务器时区。

关于java - UNIX 时间戳到日期时间与 MS SQL 不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45073317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com