2017-02-23 42 views
0

我在亞馬遜AWS上使用SQL Server 2016。我的電子郵件在我的亞馬遜傀儡寄來的時候發送的時間不正確。當我嘗試在本地重新創建這個bug時,時間是正確的。以下是我如何使用at time zone的示例。SQL Server 2016的「在時區」功能沒有按預期工作

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

u.timezone其中是用戶的時區和u指別名的表users

被輸出的時間是在UTC時間,所以我看到7:36pm,而不是2:36pm(它們格式化MomentJS)

我真的不知道這一個,對不起你們和女生開始。

UPDATE

我的服務器發送正確的時間(用正確的時區偏移),以電子郵件的工廠。當服務器創建電子郵件時,使用MomentJS格式化時間。準系統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" 

因爲我看不到這種變化,直到它推到我們的開發環境,我將無法知道這個固定的,但我認爲這是問題。

+0

是否有一個原因,你不能使用['GETUTCDATE()'](https://msdn.microsoft.com/en-us/library/ms178635.aspx)的第一部分?錯誤的時間有多不正確?你在什麼時區? –

+0

對不起,我打算在我的文章中加入輸出,我會編輯。沒有理由我不能使用它。我試試這個。 – kaleoh

+0

哦,我想你的服務器實例可能無法在UTC運行,在這種情況下的[SQL SYSDATETIME和SYSUTCDATETIME]列出的功能之一(http://stackoverflow.com/a/31584658/1115360)將是適合你用法。 –

回答

0

我的服務器是發送正確的時間(用正確的時區偏移),以電子郵件的工廠。當服務器創建電子郵件時,使用MomentJS格式化時間。

準系統moment()功能需要一個時間(-5:00)一個時區偏移,並調整到本地機器的本地時間。

我的機器上本地時間是美國東部時間,但在亞馬遜(其中正在創建電子郵件)不是。因此我必須使用moment.parseZone()

更改爲moment.parseZone()修復了這個問題。問題解決了。