SQL Server中Unix时间戳转换为何需指定'1-1-1970 05:30:00'?
Unix时间戳转SQL Server datetime的起始日期疑问解答
核心原因:Unix时间戳的基准与时区转换
Unix时间戳的本质是从Unix纪元(UTC标准时间1970年1月1日00:00:00)开始累计的秒数(你的输入是毫秒级戳,所以要除以1000转成秒)。
你用的'1-1-1970 05:30:00',其实是Unix纪元转换为**印度标准时间(IST)**的结果——IST时区比UTC快5小时30分,所以UTC的1970-01-01 00:00:00对应IST的1970-01-01 05:30:00。
为什么修改年月日会出错?
Unix时间戳的计算严格绑定「1970-01-01 00:00:00 UTC」这个基准点,如果你修改起始日期的年、月、日,等于把计算的基准从Unix纪元改成了其他时间点,自然会偏离正确的转换结果。
比如你的例子:
--Unix timestamps input (1679722784640) to get Date and Time 2023-03-25 11:09:44 select dateadd(s, convert(bigint, 1679722784640) / 1000, convert(datetime, '1-1-1970 05:30:00'))
这里用IST的纪元起始点,是为了直接得到IST时区的datetime结果。如果要转成UTC时间,只需要把起始日期改成'1970-01-01 00:00:00'即可。
内容的提问来源于stack exchange,提问作者Manikandan R
相关产品推荐
相关产品推荐

