我有一个用户表,UTC时间偏移,如果他们观察夏令时。是否有内置的方法来获得正确的用户时间?
答案 0 :(得分:1)
现在我正在这样做:
SELECT
CASE USEDAYLIGHTSAVING
WHEN 1 THEN
CASE DATEDIFF(HH,GETUTCDATE(),GETDATE())
-- I know the server is set to Mountan time and follows daylight saving time
-- MDT = -6
-- MST = -7
WHEN -6 THEN
DATEADD(HH,TIMEZONEOFFSET+1,GETUTCDATE())
ELSE
DATEADD(HH,TIMEZONEOFFSET,GETUTCDATE())
END
ELSE
DATEADD(HH,TIMEZONEOFFSET,GETUTCDATE())
END
FROM
USERS
它可以工作,但是如果服务器被移动到另一个时区或者没有休闲夏令时我就会被淹没。
答案 1 :(得分:0)
我有一个用户表,UTC时间偏移,如果他们观察夏令时。是否有内置的方法来获得正确的用户时间?
世界各地的不同时区都以不同的方式观察夏令时。他们在一天的不同时间开始和停止。简单地使用偏移量和DST标志不足以可靠地转换。
相反,您需要时区标识符,例如America/Los_Angeles
或其中一个listed here。完成后,您可以使用我的SQL Server Time Zone Support项目进行转换。
答案 2 :(得分:0)
这并非在所有情况下都有效,但是对于在美国(含DST)定义为3月2日(星期日)和11月1日(星期日)之间的用户来说,这是一个快速解决方案。
DECLARE @Date datetime2 = '2018-11-04 02:01:00'
SELECT
CASE
WHEN @Date between
DATETIMEFROMPARTS(YEAR(@Date), 3, (8 - DATEPART(WEEKDAY, DATEFROMPARTS(YEAR(@Date), 3, 1))) + 8, 02, 00, 00, 00)
and
DATETIMEFROMPARTS(YEAR(@Date), 11, (8 - DATEPART(WEEKDAY, DATEFROMPARTS(YEAR(@Date), 11, 1))) + 1, 02, 00, 00, 00)
THEN 1
ELSE 0
END --Is it dst?
答案 3 :(得分:0)
SQL 2016中引入的Function Show-DiskInfo {
$HWDisks = Get-PhysicalDisk
$HardwareInfo = New-Object PSCustomObject -Property @{
Info = "Backupserver Hardware Info `n----------------"
}
$x = 1
foreach ($disk in $HWDisks) {
$HardwareInfo | Add-Member NoteProperty -Name Disk$x -Value ($disk.FriendlyName + " " + [math]::Round(($disk.Size/1GB),2) + " GB")
$x++
}
$HardwareInfo | Format-List
}
Show-DiskInfo
表允许确定与UTC的偏移量以及DST当前是否有效。
sys.time_zone_info
查询结果将是: