2013-03-04 36 views
1

數據庫中的日期/時間數據存儲爲帶時區的Oracle時間戳(02-FEB-2013 13:25:00 US/PACIFIC)。 當我讀取數據時,我需要確定此時間與用戶當前本地時間之間的差異。使用上面,我可以得到用戶的本地時間偏移:獲取用戶本地時間

OracleTimeStampTZ dtzLastActivity = new OracleTimeStampTZ(dr["LAST_ACTIVITY_TZ"].ToString()); 
TimeSpan tsOffset = dtzLastActivity.GetTimeZoneOffset(); 

我能得到當地的時間,也許使用的TimeZoneInfo,只知道偏移,這樣的話我可以從本地時間得到差減去時間數據庫?

回答

1

US/PacificIANA/Olson時區標識符 - 不是Windows時區標識。所以你不能使用TimeZoneInfo類。

而是使用TZDB實現,例如NodaTime。它充分了解這些類型的時區,並可以進行您正在尋找的計算類型。

順便說一句 - US/Pacific實際上是America/Los_Angeles的別名。你可以找到這些時區的列表here

UPDATE

對不起,我忽略了你正在使用OracleTimeStampTZ。這個appears已經實現了TZDB,所以你應該可以直接使用它。嘗試以下操作:

var span = DateTime.UtcNow - dtzLastActivity.ToUniversalTime().Value; 
+0

@Aristos我想我沒有傳達我需要的東西。我需要數據庫中的內容與用戶本地時間之間的時間差,但是需要相同偏移量的本地時間。因此,如果該列包含太平洋的日期/時間,無論查看數據的用戶在哪裏,我都需要獲取太平洋當地時間以顯示差異。 – NoBullMan 2013-03-04 18:45:50

+0

謝謝馬特,這就是我所需要的。 – NoBullMan 2013-03-04 22:04:06