Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将SQL Server数据时间格式转换为unix时间_Sql Server_Datetime - Fatal编程技术网

Sql server 将SQL Server数据时间格式转换为unix时间

Sql server 将SQL Server数据时间格式转换为unix时间,sql-server,datetime,Sql Server,Datetime,我们正在使用一个JSON API,它以SQL Server日期时间格式返回时间,例如:/date(-6847804800000+0000) 我正在尝试将其转换为unix时间,以便在其上使用标准方法,有人知道一种简单的方法吗?如果不是,将其转换为任何类型的其他日期格式都会有所帮助 PS:我们无法访问SQL Server数据库来更改API输出数据的方式。使用PowerShell快速检查: PS> [datetime]"1970-01-01 00:00" + [timespan]::FromMi

我们正在使用一个JSON API,它以SQL Server日期时间格式返回时间,例如:/date(-6847804800000+0000)

我正在尝试将其转换为unix时间,以便在其上使用标准方法,有人知道一种简单的方法吗?如果不是,将其转换为任何类型的其他日期格式都会有所帮助


PS:我们无法访问SQL Server数据库来更改API输出数据的方式。

使用PowerShell快速检查:

PS> [datetime]"1970-01-01 00:00" + [timespan]::FromMilliseconds(-6847804800000)

01 January 1753 00:00:00

因此,评论家马丁和格本似乎是正确的。这是19700101T000000的毫秒偏移量

该服务正在传递它所谈论的一天中的小时数

1753的基数用于确定偏移值,您的偏移量为1970

首先,您需要获取返回的-6847804800000,并将1753和1970之间的总毫秒数相加。这将给出从1970年开始的偏移量

        SqlDateTime minSqlDateTime = SqlDateTime.MinValue;

        DateTime minTimeStampDateTime = new DateTime(1970, 1, 1);

        double milli = (minTimeStampDateTime - (DateTime)minSqlDateTime).TotalMilliseconds; // = 6847804800000

        double toDetermineTicks = -6847804080000; // so this is 01/01/1753 12:00 PM

        double ActualUnixTicks = (toDetermineTicks + milli) / 1000;

-6847804800000不喜欢SQL Server中的任何已知日期时间格式。首先,对于1900年1月1日之后的所有日期,任何值都将大于0。这意味着代表什么日期?嗨,gbn,我同意。我一辈子都搞不懂这件事。根据我们拥有的XML文档,这应该代表1753年1月1日。负数是非常令人困惑的。如果是1970年以来的毫秒,你会得到1753年1月1日。负数意味着1970年之前的毫秒数。您使用什么语言来转换日期?只需添加一点上下文,1753-01-01是datetime数据类型可以接受的最小值。因此,这为这是正确答案提供了一些证据。@BenThul:SQL的
datetime
类型为True,但.NET的
datetime
(最小值为0001-01-01),它与SQL的(2008&2008R2)
datetime2
类型匹配。需要注意
datetime
,因为它是不明确的,甚至仅限于MS产品。