我需要將日期時間存儲在CST時區中,而不管給定的時區。從本地客戶端系統的時間轉換爲CST,反之亦然
誰訪問應用程序的客戶端是從不同的時區,比如IST,CST,EST,...
我需要存儲客戶端在CST時區進入到我的數據庫中的所有日期時間。而檢索時,我需要轉換回當地時區。
如何實現它?
我需要將日期時間存儲在CST時區中,而不管給定的時區。從本地客戶端系統的時間轉換爲CST,反之亦然
誰訪問應用程序的客戶端是從不同的時區,比如IST,CST,EST,...
我需要存儲客戶端在CST時區進入到我的數據庫中的所有日期時間。而檢索時,我需要轉換回當地時區。
如何實現它?
通常會接受以GMT/UTC格式在數據庫中存儲所有日期時間值。
對於那些誰想要呈現UTC值,爲不同的用戶應用程序的特定時間段,如wilpeck提到的,它建議您確定最終用戶的本地化和:
編輯:
例如:
你可能有一個表的字段的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的當地時間。
像這樣的東西很可能會爲你工作。我可能對時區ID有不正確的值,但我認爲這很接近。該時區的東西是在.NET中可用3.5+
DateTime clientDateTime = DateTime.Now;
DateTime centralDateTime = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(clientDateTime, "Central Time (US & Canada)");
編輯:
如果能夠通過檢測客戶端時區以UTC存儲日期時間時,他們提供給您,這將是最好的選擇一個日期。然後根據客戶端的時區,您可以根據客戶端的當地時區顯示日期。
這最終給我拋出了一個例外。使用TimeZoneInfo.ConvertTimeBySystemTimeZoneId(日期,「中央標準時間」)訣竅 – CountMurphy
我可以有一個樣本嗎?例如:客戶的系統位於IST,服務器位於CST。 – Prasad
編輯包含示例 –
謝謝cottsak,這非常有用 – Prasad