2012-01-23 9 views
2

私はUTCとしてデータを格納していますが、正しく取得する方法については非常に混乱しています。私は、MSSQLのdatetime列にUTCとして値を格納します。現在、私がそれを取得する方法は、GMTオフセットを開始日時範囲と終了日時範囲に設定することです。また、そのdatetimeフィールド(グループ化)に集約を適用して、ユーザーの適切なローカルタイムゾーンに表示する必要もあります。私が抱えている問題は、今日の範囲を探すと正確に一致する列をプルアップしますが、これらの列のdatetime値はUTCの異なる日である可能性があります。私は1日ごとにグループ分けしています。たとえば、ある日の開始日と終了日(今日)の範囲を選択すると、昨日から今日のUTC日時の値が表示されます。 GMTオフセットを表示値に適用しようとすると、おそらく2つの異なる日付として出力されます。どのようにしてレンジとディスプレイを適切に調整できますか? CSTまたはEST(例えば)の標準時刻にUTC形式の日付を変換UTC datetimeを正しく格納し、ローカルオフセットを使用するにはどうすればいいですか?

おかげ

答えて

5

まっすぐです。アプリケーションで必要な各タイムゾーンごとに、オフセット値を別の列またはテーブルに格納する必要があります。

例:UTCからCSTは-6時間です。同様にUTCからESTまでは-5時間です。

DECLARE @UTC_Date DATETIME 
SET @UTC_Date = GETUTCDATE() 

SELECT 
@UTC_Date AS [UTC], 
DATEADD(hh, -6, @UTC_Date) AS [CST - Standard Time], 
DATEADD(hh, -5, @UTC_Date) AS [EST - Standard Time] 

計算に夏時間を組み込むと複雑になります。しかし、指定された日付が夏時間の場合、上記の計算は機能しません。

夏時間はどのように計算されますか?

  1. 年= 2006 <は、夏時間が間にある場合:> = 2007年は、その後夏時間場合は10月

    の最後の日曜日の午前2時まで、4月の第1日曜日に 午前2
  2. 間にある:11月の第1日曜日の午前2時まで3月の第2日曜日の午前2時

  3. UTC = CST(標準時間)に-6

  4. CDT(夏時間)に

    UTC = -5 ESTに

  5. UTC(標準時)= -5

  6. UTC EDT(夏時間)へ= -4

溶液をチェックここで夏時間を扱うために - http://vadivel.blogspot.com/2011/10/timezone-conversion-utc-to-cst-with.html

関連する問題