将Azure SQL DB的UTC时间转换为含夏令时的中欧本地时间
解决Azure SQL UTC时区转中欧夏令时时间问题
核心方案:使用AT TIME ZONE搭配正确的时区名称
Azure SQL的AT TIME ZONE函数内置了时区规则,无需手动判断夏令时切换日期。中欧对应的Windows时区名称为Central European Standard Time,这个时区会自动识别每年CET(冬令时)和CEST(夏令时)的切换时间,直接用它转换即可。
具体SQL写法
因为你的Azure SQL服务器处于UTC时区,GETDATE()和GETUTCDATE()返回的都是UTC时间,可通过以下两种方式转换为中欧本地时间:
- 从UTC时间直接转换:
GETUTCDATE() AT TIME ZONE 'UTC' AT TIME ZONE 'Central European Standard Time'
- 用带时区偏移的系统时间转换:
SYSDATETIMEOFFSET() AT TIME ZONE 'Central European Standard Time'
为什么之前的方法失效?
- 用
GETDATE()和GETUTCDATE()计算时差:服务器时区设为UTC时,这两个函数返回的时间完全一致,无法算出时差。 - 误用
AT TIME ZONE参数:如果之前直接指定'CET'或'CEST',这两个是具体时区偏移,不是带规则的时区名称,因此无法自动处理夏令时切换。
内容的提问来源于stack exchange,提问作者Bart Klein
相关产品推荐
相关产品推荐

