数据库中的日期/时间数据存储为带时区的Oracle时间戳(02-FEB-2013 13:25:00 US / PACIFIC)。 当我读取数据时,我需要确定此时间与用户当前本地时间之间的差异。使用上面的方法,我可以获得用户的本地时间偏移:
OracleTimeStampTZ dtzLastActivity = new OracleTimeStampTZ(dr["LAST_ACTIVITY_TZ"].ToString());
TimeSpan tsOffset = dtzLastActivity.GetTimeZoneOffset();
我可以获取当地时间,也许使用TimeZoneInfo,只知道偏移量,那么我可以从当地时间减去数据库中的时间以获得差异吗?
答案 0 :(得分:1)
US/Pacific
是IANA/Olson时区标识符 - 不是Windows时区ID。所以你不能使用TimeZoneInfo
类。
相反,使用TZDB实现,例如NodaTime。它完全了解这些类型的时区,可以进行您正在寻找的计算类型。
BTW - US/Pacific
实际上是America/Los_Angeles
的别名。您可以找到这些时区的列表here。
<强>更新强>
抱歉,我忽略了您使用的是OracleTimeStampTZ
。这个appears已经实现了TZDB,所以你应该能够直接使用它。请尝试以下方法:
var span = DateTime.UtcNow - dtzLastActivity.ToUniversalTime().Value;