在SQL Server中将秒转换为日期时间

10
如何将秒转换为 datetime?我尝试了下面的方法,但结果不正确:
CONVERT(datetime, DATEADD(ms, dateTimeInSeconds, 0))

这里有一个例子:1900-01-15 21:58:16.287 应该是像这样的 2010-11-02 14:56:50.997


结果有何不正确之处? - Guffa
请提供预期的输入和输出。dateTimeInMilliseconds从何时开始? - MartW
dateTimeInMilliseconds 为0代表什么日期时间? - Wim
什么值的dateTimeInMilliseconds应该给你2010-11-02 14:56:50.997? - MartW
没有全局标准定义了什么是“毫秒级日期时间”。通常提供的额外信息是,它表示自1970年1月1日协调世界时午夜以来的毫秒数。 - Damien_The_Unbeliever
显示剩余2条评论
3个回答

13

根据您的示例,请尝试以下内容:

select DATEADD(s, dateTimeInMilliseconds, '19700101')

还是不正确,这里有一个例子:1970-01-16 08:47:36.533 -> 2010-..-.. - Ventsislav Marinov
你有多少毫秒的值,应该得到什么结果? - aF.
结果是相差2个小时,需要做出什么改变? - Ventsislav Marinov
@VentsislavMarinov - 我猜你所在的时区比协调世界时晚2个小时? - Damien_The_Unbeliever
@Guffa 给我示例时,我看到那是秒而不是毫秒。 - aF.
@VentsislavMarinov:所以,问题中唯一确定的日期信息实际上是错误的? ;) 我已根据您的编辑修改了我的答案。 - Guffa

2
当你使用零值日期时,这会被转换为1900-01-01。请使用您所选的特定日期作为基准时间:
convert(datetime, dateadd(ms, dateTimeInMilliseconds, '2010-01-01'))

请注意,datetime数据类型没有毫秒精度,其分辨率为1/300秒。如果您有4毫秒并进行转换,则会得到2010-01-01 00:00:00.003而不是2010-01-01 00:00:00.004。如果您需要保留毫秒分辨率,则需要使用datetime2数据类型。
convert(datetime2, dateadd(ms, dateTimeInMilliseconds, cast('2010-01-01' as datetime2)))

编辑:

要使用秒而不是毫秒,请在dateadd调用中使用s而不是ms

convert(datetime, dateadd(ms, dateTimeInSeconds, '1970-01-01'))

这是解决问题的唯一方法吗?如果我不知道确切的时代呢? - Ventsislav Marinov
@VentsislavMarinov:你必须知道确切的时代。如果你不知道这个值的含义,那么将其转换为有意义的东西是不可能的。 - Guffa

2

信息化的时间跨度字符串:

最初的回答:

declare @seconds int = 93825

convert(varchar,(@seconds/86400)) + 'd:' + format(dateadd(ss,@seconds,0),'HH\h:mm\m:ss\s')

结果:1天02小时03分钟45秒


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接