我在数据库中存储以UTC表示的时间戳,例如‘2015-03-27 08:32:46.024+000:00’
我正在使用当前服务器的时区将时间戳转换为本地时间。
select
SWITCHOFFSET (CAST(CAST('2015-03-27 08:32:00.000 +00:00' AS datetime2(3)) as DateTimeOffset(3)), DATEPART(TZ, SYSDATETIMEOFFSET ()) )
只要我在冬季查看冬季时间戳,这就可以很好地工作。
对于最后一个星期五时间,冬季时间戳用夏季时间表示:"2015-03-27 10:32:00.000+02:00"。
我想看2015-03-27 09:32:00.000+01:00。
有人能在不将冬季和夏季存储在数据库中的情况下找到解决方案吗?
正如我在问题评论中提到的,这通常最好在应用程序代码中完成,而不是在数据库中。然而,在某些情况下,将其保存在数据库中可能非常有用或必要。例如,您可能需要按特定时区中的日期分组,或者您可能需要批量转换许多项目,或者为报告系统生成数据。
对于这些,您可以使用我的SQL Server时区支持项目。
按照安装说明,然后你可以这样做:
SELECT Tzdb.UtcToLocal('2015-03-27 08:32:46.024', 'Europe/Paris')
我在猜测你的时区。你可以从这里的列表中选择任何一个。