2012-11-03 29 views
4

我有一個應用程序需要服務器來處理客戶端請求。時間轉換爲客戶端時間c#

在這個應用程序中時間非常重要。

每當客戶端請求任何東西,我想節省請求的時間。

問題是,我的服務器在美國,客戶在澳大利亞。

如何將服務器時間更改爲客戶端時間並將其保存在數據庫中。

即使在白天節電期間,這應該是準確的。

我怎樣才能做到這一點

好吧,我有時間存入數據庫爲UTC。

在客戶端我有這樣的代碼,

DateTime dt = booking.CreateDateTime.Value; 
var localTime = TimeZone.CurrentTimeZone.ToLocalTime(dt); 

當我打印本地時間,它是7小時快於本地時間。

我該如何改變當地時間?

+0

我想你知道時間的不同嗎?您可以獲得當前時間並計算幾小時內的差異?並使用該值? – Rob

+0

如果我這樣做,它會在澳大利亞的白天節電期間得到改變。 –

+0

什麼樣的客戶?桌面還是網頁? – Oded

回答

4

我知道的指導方針指出,時間應該始終保存爲數據庫中的UTC,而不是本地。這樣可以避免許多本地時差問題(包括夏令時)。

當您需要本地時間時,從數據庫中以UTC格式檢索並轉換它。您可以使用日期時間結構來幫你出這一點:

var utcNow = DateTime.UtcNow; 
SaveToDB(utcNow); 
var utcFromDb = RetrieveTimeFromDb(); 
var localTime = DateTime.ToLocalTime(utcFromDb); 
+3

是的,總是用UTC來處理,只能轉換爲某個時區和dst來顯示。另外,如果不明顯,則應在服務器中生成時間。 – Esailija

0

這是通常的最佳實踐存儲日期UTC時間,然後在必要時轉換爲一個區域。

var date = DateTime.UtcNow(); 
var tzi = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time"); 
var offset = tzi.GetUtcOffset(date); 
0

同意時間應該以UTC存儲。轉換到客戶端的本地時間(而不是服務器)時,問題就會出現。要轉換到客戶端的本地時間,您需要知道客戶端的時區信息,並將其與UTC時間一起存儲在數據庫中。

然後用這兩條信息你應該可以使用上面的方法轉換到客戶端的本地時間。

+0

我用UTC在數據庫中存儲時間。並檢索時間並將其轉換爲當地時間。但轉換時間比當地時間快7個小時。 –