我有這個解決了新西蘭時間如下:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Vivi Woolford
-- Create date: 27-09-2016
-- Description: This procedure only Works in New Zealand
-- =============================================
CREATE FUNCTION [dbo].[udf_GetLocalTimeFromUTC]
(
@UTCTime DATETIME
)
RETURNS DATETIME
AS
BEGIN
--Daylight Saving commences on the last Sunday in September, when 2.00am becomes 3.00am.
--It ends on the first Sunday in April, when 3.00am becomes 2.00am.
DECLARE @LocalTime DATETIME
DECLARE @OffSet INT = 12
SELECT @LocalTime = DATEADD(HOUR, @OffSet, @UTCTime)
IF @LocalTime BETWEEN
/*FINISH DAY LIGHT SAVINGS*/
DATEADD(HOUR, 2, DATEADD(dd, (6-(DATEDIFF(dd,0,DATEADD(mm,(YEAR(@LocalTime)-1900) * 12 + 3,0))%7)),DATEADD(mm,(YEAR(@LocalTime)-1900) * 12 + 3,0)))
AND
/*START DAY LIGHT SAVINGS*/
DATEADD(HOUR, 2, DATEADD(dd, -1*(DATEPART(dw, DateAdd(day, -1, DateAdd(month, DateDiff(month, 0, @LocalTime)+1, 0)))-1),DateAdd(day, -1, DateAdd(month, DateDiff(month, 0, @LocalTime)+1, 0))))
BEGIN
SELECT @LocalTime = @LocalTime
END
ELSE
BEGIN
SELECT @LocalTime = DATEADD(HOUR, 1, @LocalTime)
END
RETURN @LocalTime
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Vivi Woolford
-- Create date: 27-09-2016
-- Description: This procedure only Works in New Zealand
-- =============================================
ALTER FUNCTION [dbo].[udf_GetUTCFromLocalTime]
(
@LocalTime DATETIME
)
RETURNS DATETIME
AS
BEGIN
--Daylight Saving commences on the last Sunday in September, when 2.00am becomes 3.00am.
--It ends on the first Sunday in April, when 3.00am becomes 2.00am.
DECLARE @UTCTime DATETIME
DECLARE @OffSet INT = 12
IF @LocalTime BETWEEN
/*FINISH DAY LIGHT SAVINGS*/
DATEADD(HOUR, 2, DATEADD(dd, (6-(DATEDIFF(dd,0,DATEADD(mm,(YEAR(@LocalTime)-1900) * 12 + 3,0))%7)),DATEADD(mm,(YEAR(@LocalTime)-1900) * 12 + 3,0)))
AND
/*START DAY LIGHT SAVINGS*/
DATEADD(HOUR, 2, DATEADD(dd, -1*(DATEPART(dw, DateAdd(day, -1, DateAdd(month, DateDiff(month, 0, @LocalTime)+1, 0)))-1),DateAdd(day, -1, DateAdd(month, DateDiff(month, 0, @LocalTime)+1, 0))))
BEGIN
SELECT @UTCTime = DATEADD(HOUR, [email protected], @LocalTime)
END
ELSE
BEGIN
SELECT @UTCTime = DATEADD(HOUR, [email protected], @LocalTime)
END
RETURN @UTCTime
END
go
問題是問如何做,如果你沒有使用SqlServer的2008年,您可以使用往返格式存儲日期爲字符串您處理用戶在DST期間輸入的日期。將它們存儲爲UTC很容易,但是當你甚至不確定它應該是什麼時間時,如何轉換爲UTC? – 2009-08-11 17:06:51
啊我明白了。據推測,這是針對一個斷開連接的應用程序,那麼,服務器時間無益? – 2009-08-11 17:07:48
獲取服務器時間並將其存儲爲UTC很容易。所呈現的場景詢問用戶輸入的日期,這是一個完全不同的蠕蟲罐。 – 2009-08-11 17:12:34