嗨,SQL Server上有一個函數可以識別夏令時是否激活。在SQL Server上處理夏令時
其中我創建了一個標量函數,可以將服務器時間轉換爲在插入/更新時使用應用程序的工廠位置時間。
問題是我不知道在美國有DST。所以我的計劃,我會做這樣的事情
if DST is active
// -1
else
// + 1
end
,我需要檢查,如果DST是主動或不
任何想法嗎?
感謝和問候
嗨,SQL Server上有一個函數可以識別夏令時是否激活。在SQL Server上處理夏令時
其中我創建了一個標量函數,可以將服務器時間轉換爲在插入/更新時使用應用程序的工廠位置時間。
問題是我不知道在美國有DST。所以我的計劃,我會做這樣的事情
if DST is active
// -1
else
// + 1
end
,我需要檢查,如果DST是主動或不
任何想法嗎?
感謝和問候
處理夏令時間功能:
CREATE function [dbo].[fn_GetDaylightSavingsTimeStart]
(@Year varchar(4))
RETURNS smalldatetime
as
begin
declare @DTSStartWeek smalldatetime, @DTSEndWeek smalldatetime
set @DTSStartWeek = '03/01/' + convert(varchar,@Year)
return case datepart(dw,@DTSStartWeek)
when 1 then
dateadd(hour,170,@DTSStartWeek)
when 2 then
dateadd(hour,314,@DTSStartWeek)
when 3 then
dateadd(hour,290,@DTSStartWeek)
when 4 then
dateadd(hour,266,@DTSStartWeek)
when 5 then
dateadd(hour,242,@DTSStartWeek)
when 6 then
dateadd(hour,218,@DTSStartWeek)
when 7 then
dateadd(hour,194,@DTSStartWeek)
end
end
CREATE function [dbo].[fn_GetDaylightSavingsTimeEnd]
(@Year varchar(4))
RETURNS smalldatetime
as
begin
declare @DTSEndWeek smalldatetime
set @DTSEndWeek = '11/01/' + convert(varchar,@Year)
return case datepart(dw,dateadd(week,1,@DTSEndWeek))
when 1 then
dateadd(hour,2,@DTSEndWeek)
when 2 then
dateadd(hour,146,@DTSEndWeek)
when 3 then
dateadd(hour,122,@DTSEndWeek)
when 4 then
dateadd(hour,98,@DTSEndWeek)
when 5 then
dateadd(hour,74,@DTSEndWeek)
when 6 then
dateadd(hour,50,@DTSEndWeek)
when 7 then
dateadd(hour,26,@DTSEndWeek)
end
end
declare @DLSStart smalldatetime
, @DLSEnd smalldatetime
, @DLSActive tinyint
set @DLSStart = (select MSSQLTIPS.dbo.fn_GetDaylightSavingsTimeStart(convert(varchar,datepart(year,getdate()))))
set @DLSEnd = (select MSSQLTIPS.dbo.fn_GetDaylightSavingsTimeEnd(convert(varchar,datepart(year,getdate()))))
if @Date between @DLSStart and @DLSEnd
begin
set @DLSActive = 1
end
else
begin
set @DLSActive = 0
end
select @DLSActive
「只有鏈接」的答案往往會令人不悅。無法保證鏈接仍然有效(明年,明天,明年) –
感謝您的指導。 –
當多個時區都參與其中,我通常建議存儲所有'datetime's爲UTC,並做客戶端的任何必要的轉換軟件。 –