2016-08-24 14 views
0

列のテーブルを作成し、DateTimeOffsetという種類のテーブルを作成する必要があります。レコードが挿入されると、現在のUTCの日付と時刻を利用される。現在のutc日付時刻の既定の日付時間オフセット列を作成する方法

デフォルトの制約をGETUTCDATE()に追加すると、ローカルタイムにオフセットが0になります。 SYSUTCDATETIME()を使用すると、ローカルタイムに正しいオフセットが設定されます。

オフセットが0のutc時刻を取得することはできますか?

+0

あなたは何 'GETUTCDATE(上のいくつかの結果を提供することができます変更)、SYSUTCDATETIME(することができますSYSDATETIMEOFFSET() 'があなたのために戻ってきています。私はあなたに正しいオフセットを与えている場合に 'SYSUTCDATETIME()'を使わない理由について混乱しています。あなたの質問を数回読んで、紛失しています - おそらく、sys DTが正しく設定されていませんか? – scsimon

+0

現在の現地時間は2016-08-24 13:44:19.5187024です。select SysUtcDateTime()は2016-08-24 20:44:19.5187024を返します。これは正しいutcの日付と時刻で、たとえそれが言わないとしても0です。既定の制約をSysUtcDateTime()に設定すると、列の値は2016-08-24 13:44:19.5187024 + 00:00になります。それは私に無効なオフセットを持つ現地時間を与えます。 –

答えて

0

SYSUTCDATETIME()または他の日付タイムスタンプが何であるかによって、あなたが望むオフセットに強制することができます。あなたは、)以下を使用して、あなたはそれがなど、GETDATE()代わりにGETUTCDATE()なると使いたいいままでにオフセット...

SELECT GETUTCDATE() AS UTC_DT, SYSUTCDATETIME() AS SYS_UTC_DT, SYSDATETIMEOFFSET() AS SYS_DT_OFFSET 

SELECT CAST(TODATETIMEOFFSET(GETUTCDATE(), '+00:00') AS DATETIME2) AS UTC_WITH_OFFSET --SQL SERVER 2008 and onward... 
SELECT GETDATE() AT TIME ZONE 'UTC'              --SQL SERVER 2016 only... 
+0

これは私たちがやらなければならないことに十分近いものです。使用するデフォルトはSYSDATETIMEOFFSETであり、ローカルのオフセットを持つすべての日付で生きています。 –

+0

まだ興味深い問題ですが、私は@JoshuaBeldenを調査するつもりです – scsimon

関連する問題