如何将此Unix epoch时间(毫秒)转换查询的时区从GMT+0更改为GMT+2



我有一个数据库,它以毫秒为单位存储Unix Epoch时间戳。我用这段代码把它翻译成可读的东西(在我正在开发的GUI中使用(。然而,这导致了GMT+0的数据集,我恰好需要GMT+2。有人知道我如何把这两个小时加到结果上吗。

还有,有人知道我能做些什么吗?原因也会使此结果不正确。

代码

SELECT TOP(100) [unixcolumn], CAST(DATEADD(ms, CAST(RIGHT([unixcolumn],3) AS SMALLINT), 
DATEADD(s, [unixcolumn] / 1000, '1970-01-01')) AS DATETIME2(3))
FROM [db].[dbo].[table]

我也尝试过其他类似的解决方案;

SELECT DATEADD(s, LEFT([unixcolumn], LEN([unixcolumn]) - 3), '1970-01-01')
FROM [db].[dbo].[table]

没有用。

那么,如何在我的第一个例子中增加2个小时呢?或者更好的是,将时区设置为CEST或GMT+2?

我找到了一种方法,它很好地满足了我的特定需求。这是我的问题;

LEFT(DATEADD(SECOND, FLOOR([epochtime_column]/1000 ), '1970-01-01') AT TIME ZONE 'UTC' at TIME ZONE 'Central European Standard Time', 19)

基本上,您可以将以毫秒为单位的epoch时间中的3个相加数字截断,以秒为单位将其转换为epoch时间。之后,你把这些秒加起来就是1970-01-01,把它变成一个可读的日期。

只有当您不需要从epoch时间开始的毫秒数时,这才是一种可行的策略。如果您确实需要毫秒,那么此解决方案将不适用于您

最新更新