2014-05-23 93 views
0

我需要從表中恢復日期時間,並將其轉換成的DateTimeOffset偏移,但我需要保存這些值與他們正確的偏移量,而不是當前的偏移 例如:獲得從SQL Server日期時間

(西班牙時區的例子)

  • 如果我恢復2014/04/13 00:00:00,我需要2014/04/13 00:00:00 +02:00
  • 如果我恢復2014/02/13 00:00:00,我需要2014/02/13 00:00:00 +01:00

我知道如何用C#做到這一點,但我需要知道是否可以使用Sql Server,因爲我必須進行遷移,將具有日期時間字段的數據庫中的大量數據移動到數據庫中datetimeoffset字段。

非常感謝!

+0

爲什麼是正確的偏移對於4月13日'+02:00'和2月13日'+01:00'?你是什​​麼意思'當前抵消'? – chiccodoro

+1

你想用模糊的時間做什麼? (即你想要什麼'2013-10-27T02:30:00'?) –

+0

在我正在使用西班牙時區的例子上,所以時間變化是(今年)在3月30日。這是一個例子此更改之前和之後的日期。 – alvinEMosby

回答

0

您需要處理模糊的時代,作爲@Damien_The_Unbeliever提到,但在這裏是如何計算的偏移量(假設你的日期> = 1998)

SELECT YourDate, 
     CASE WHEN YourDate < LocalSummerTimeStart 
       OR YourDate > LocalSummerTimeEnd 
      THEN 1 
      ELSE 2 
     END AS Offset 
FROM YourTable 
    CROSS APPLY (
     SELECT YEAR(YourDate) * 10000 + 300 + (31 - ((((5 * YEAR(Yourdate))/4) + 4) % 7)) AS UTCSummerTimeStartDate 
       ,YEAR(YourDate) * 10000 + 1000 + (31 - ((((5 * YEAR(YourDate))/4) + 1) % 7)) AS UTCSummerTimeEndDate 
    ) AS CA1 
    CROSS APPLY (
     SELECT DATEADD(hour, 2, CONVERT(datetime, CONVERT(varchar(8), UTCSummerTimeStartDate), 112)) AS LocalSummerTimeStart 
       ,DATEADD(hour, 3, CONVERT(datetime, CONVERT(varchar(8), UTCSummerTimeEndDate), 112)) AS LocalSummerTimeEnd 
    ) AS CA2 

european summer time formulas

相關問題