MySQL和MSSQL服务器上的UNIX时间戳

MySQL和MSSQL服务器上的UNIX时间戳,mysql,tsql,timezone,timestamp,Mysql,Tsql,Timezone,Timestamp,为什么mysql和MS SQL Server中的时间戳会有差异 MySQL: SQL Server: select getdate() result: 2013-07-16 08:48:16.47 SELECT DATEDIFF(SECOND,'1970-01-01', '2013-07-01') result 1372636800 当我尝试获取unix\u时间戳时 MySQL: SQL Server: select getdate() result: 2013-07-16 08:48:16

为什么mysql和MS SQL Server中的时间戳会有差异
MySQL:

SQL Server:

select getdate() result: 2013-07-16 08:48:16.47
SELECT DATEDIFF(SECOND,'1970-01-01', '2013-07-01') result 1372636800
当我尝试获取
unix\u时间戳时

MySQL:

SQL Server:

select getdate() result: 2013-07-16 08:48:16.47
SELECT DATEDIFF(SECOND,'1970-01-01', '2013-07-01') result 1372636800
问题:相差7200秒(2小时)

这是一个时区问题吗?两台服务器上的服务器时间与在
now()
getdate()
上看到的相同?

您可以尝试此链接以了解Mysql中的时间戳

对于tsql时间戳,您可以查看以下链接


这是一个相当长的解决方案,但似乎有效。它解释了时区中的偏移量

SELECT DATEDIFF(SECOND, DATEADD(SECOND, DATEDIFF(SECOND, GETUTCDATE(), GETDATE()), '1970-01-01'), '2013-07-01')

很抱歉回答得太晚,但这只适用于现在的日期。如果您必须分析过去的日期,并且您有不同的时区(夏季/冬季),这将无法正常工作。

在SQL Server上使用

选择datediff(时区“UTC”处的ss'1970-01-01',SYSDATETIMEOFFSET())

这里,


SYSDATETIMEOFFSET()
返回本地系统时间,其中本地时区偏移允许转换为UTC。如果您想要的不是当前时间,请将其替换为您自己的
datetimeoffset
字段。

您是否在+2h时区?那么很可能就是它,再加上DST.MySQL
UNIX_TIMESTAMP()
给出自UNIX纪元(1970-01-01 00:00 UTC)以来的秒数。SQL Server
DATEDIFF()
正在会话时区中给定的文字上运行,该时区的UTC偏移量为1小时,加上在操作数日期1月和7月之间进行的夏令时调整。我同意eggyal。为了澄清这一点,MySQL正在使用会话的时区(SHOW变量,如“%timezone%”)解释该日期文字,并基本上将其转换为以UTC表示的等效日期时间,然后获得该日期与纪元开始(1970年1月1日午夜UTC)之间的秒差。SQL Server正在使用SQL Server时区设置计算差异。根据各自遵守的规范,这两个结果都是“正确的”。在服务器上使用
GETUTCDATE()
,在客户端计算机上显示带有时区偏移的日期时间。这很好,因为您可以将其用于任何日期时间,而不仅仅是“现在”。