我有以下情形:閱讀DateTime對象
美國:數據庫&應用服務器
歐洲:客戶
服務器讀取日期時間(例如12:00)從數據庫中提取對象並將其發送給歐洲的客戶端。現在的問題是,客戶端在客戶端的時區(例如18:00)中顯示此日期時間,但我們需要數據庫中的時間,而與服務器的時區無關。在客戶端,我們不知道這個值來自哪個時區。
那麼我們該如何實現呢?
我有以下情形:閱讀DateTime對象
美國:數據庫&應用服務器
歐洲:客戶
服務器讀取日期時間(例如12:00)從數據庫中提取對象並將其發送給歐洲的客戶端。現在的問題是,客戶端在客戶端的時區(例如18:00)中顯示此日期時間,但我們需要數據庫中的時間,而與服務器的時區無關。在客戶端,我們不知道這個值來自哪個時區。
那麼我們該如何實現呢?
您的標籤告訴答案。
使用TimeZone類。
http://msdn.microsoft.com/en-us/library/system.timezone.touniversaltime.aspx
也:Creating a DateTime in a specific Time Zone in c# fx 3.5
所以在你的數據庫,時間應該是UTC。從那裏你可以做任何你想做的事情。
TimeZone已過時 - TimeZoneInfo是你的朋友。 – 2010-09-17 12:07:25
以及我鏈接到您的帖子:) – Stefanvds 2010-09-17 12:13:49
難道你不能簡單地使用DateTime.ToUniversalTime()
?
http://msdn.microsoft.com/en-us/library/system.datetime.touniversaltime.aspx
或者,如果你不想UTC,你可以找到你的服務器的時區,並做一些事情,如:
DateTime dt;
TimeZoneInfo timezone_EST =
TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime dt_EST = TimeZoneInfo.ConvertTime(dt, timezone_EST);
這種方法的問題是,我將不得不迭代通過10k行的數據集表來做到這一點。 – Enyra 2010-09-17 12:20:18
如果你存儲SQL DateTime數據2008年,看看新的datetimeoffset類型,它將存儲時區信息以及日期和時間本身
它不存儲時區信息。它存儲當時UTC的偏移量。那些*非常*不同的東西。給定一個UTC時間和一個時區,我會知道當地時間是五分鐘後。給定UTC瞬間和偏移量,我不會。 – 2010-09-17 12:10:43
不幸的是,它現在還不支持SQL 2005。 – Enyra 2010-09-17 12:18:46
相關問題:http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone-最佳做法 – Oded 2010-09-17 12:07:32