2009-10-13 70 views
3

我需要將日期時間存儲在CST時區中,而不管給定的時區。從本地客戶端系統的時間轉換爲CST,反之亦然

誰訪問應用程序的客戶端是從不同的時區,比如IST,CST,EST,...

我需要存儲客戶端在CST時區進入到我的數據庫中的所有日期時間。而檢索時,我需要轉換回當地時區。

如何實現它?

回答

2

通常會接受以GMT/UTC格式在數據庫中存儲所有日期時間值。

對於那些誰想要呈現UTC值,爲不同的用戶應用程序的特定時間段,如wilpeck提到的,它建議您確定最終用戶的本地化和:

  • 堅持的時候,店與UTC日期值的語言環境
  • 讀取時,使UTC值本地時間與相關的區域值

編輯:

例如:

你可能有一個表的字段的startDateTime所以要支持多個時區,你可能有一個附加字段StartDateTimeOffset。如果客戶處於印度標準時間(IST)區域,則日期時間值可能爲2009/10/13 14:45,即2009/10/13 09:15以UTC表示。因此,您需要在StartDateTime字段中存儲UTC值(2009/10/13 09:15),並在StartDateTimeOffset字段中存儲偏移量+05:30。現在,當您從數據庫讀取此值時,可以使用偏移量將UTC日期時間值(2009/10/13 09:15)轉換回2009/10/13 14:45的當地時間。

+0

我可以有一個樣本嗎?例如:客戶的系統位於IST,服務器位於CST。 – Prasad

+0

編輯包含示例 –

+0

謝謝cottsak,這非常有用 – Prasad

2

像這樣的東西很可能會爲你工作。我可能對時區ID有不正確的值,但我認爲這很接近。該時區的東西是在.NET中可用3.5+

DateTime clientDateTime = DateTime.Now; 
     DateTime centralDateTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(clientDateTime, "Central Time (US & Canada)"); 

編輯:

如果能夠通過檢測客戶端時區以UTC存儲日期時間時,他們提供給您,這將是最好的選擇一個日期。然後根據客戶端的時區,您可以根據客戶端的當地時區顯示日期。

+2

這最終給我拋出了一個例外。使用TimeZoneInfo.ConvertTimeBySystemTimeZoneId(日期,「中央標準時間」)訣竅 – CountMurphy

相關問題