2017-02-23 10 views
0

私はAmazon AWSでSQL Server 2016を使用しています。私の電子メールはAmazonで私のpupperから送信されたときに間違った時間で送信されています。このバグをローカルで再現しようとすると、時が正しいことになります。以下は、私がat time zoneをどのように使用するかの例です。 u.timezoneは、ユーザのタイムゾーンとuあるSQL Server 2016の "at time zone"機能が期待通りに機能しない

getDate() at time zone 'utc' at time zone u.timezone

はエイリアステーブルusersを指します。出力されて

時間はUTC時刻であるので、私はこの1つ、申し訳ありません男とギャルを開始する場所を私は本当に知らない(彼らはMomentJSでフォーマットされている)

7:36pmの代わり2:36pmを参照してください。

UPDATE

私のサーバーは、電子メールの工場に(オフセット正しいタイムゾーンで)正しい時刻を送信しています。サーバーが電子メールを作成すると、時刻はMomentJSを使用してフォーマットされます。 barebones moment()関数は、タイムゾーンオフセット(-5:00)で時間がかかり、ローカルマシンのローカル時刻に調整されます。私のマシンの現地時間はESTですが、アマゾン(電子メールが作成されている場所)ではありません。したがって、moment.parseZone()を使用する必要があります。 MomentJS docsから

If your date format has a fixed timezone offset, use moment.parseZone: 
moment.parseZone("2013-01-01T00:00:00-13:00"); 
This results in a date with a fixed offset: 
"2013-01-01T00:00:00-13:00" 

それが私たちのdevの環境にプッシュされるまで、私はこの変更を見ることができないので、私はこれはそれを修正しているかどうかを知ることはできませんが、私はこれがだったと思います問題。

+0

最初の部分に['GETUTCDATE()'](https://msdn.microsoft.com/en-us/library/ms178635.aspx)を使用できない理由はありますか?不正確な時間はどのくらい間違っていますか?あなたは何タイムゾーンですか? –

+0

申し訳ありませんが私の投稿にouputを含めることを意味しました、私は編集します。私はそれを使うことができない理由はない。私はこれを試してみる。 – kaleoh

+0

ああ、サーバーインスタンスがUTCで実行されていない可能性があります。その場合、[SQL SYSDATETIMEおよびSYSUTCDATETIME](http://stackoverflow.com/a/31584658/1115360)に記載されている関数のいずれかがあなたの環境に適しています使用法。 –

答えて

0

私のサーバーは、正しいタイムゾーンオフセットでメールを送信していました。サーバーが電子メールを作成したとき、MomentJSを使用して時刻がフォーマットされました。

ベアボーンmoment()関数は、タイムゾーンオフセット(-5:00)で時間がかかり、ローカルマシンのローカル時刻に調整します。

私のマシン上の現地時間はESTですが、Amazon(電子メールが作成されている場所)ではありません。したがって、moment.parseZone()を使用する必要があります。

moment.parseZone()に変更するとこの問題が解決されます。問題が解決しました。

関連する問題