获取用户当地时间

时间:2013-03-04 18:31:08

标签: asp.net oracle11g timezone

数据库中的日期/时间数据存储为带时区的Oracle时间戳(02-FEB-2013 13:25:00 US / PACIFIC)。 当我读取数据时,我需要确定此时间与用户当前本地时间之间的差异。使用上面的方法,我可以获得用户的本地时间偏移:

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

我可以获取当地时间,也许使用TimeZoneInfo,只知道偏移量,那么我可以从当地时间减去数据库中的时间以获得差异吗?

1 个答案:

答案 0 :(得分:1)

US/PacificIANA/Olson时区标识符 - 不是Windows时区ID。所以你不能使用TimeZoneInfo类。

相反,使用TZDB实现,例如NodaTime。它完全了解这些类型的时区,可以进行您正在寻找的计算类型。

BTW - US/Pacific实际上是America/Los_Angeles的别名。您可以找到这些时区的列表here

<强>更新

抱歉,我忽略了您使用的是OracleTimeStampTZ。这个appears已经实现了TZDB,所以你应该能够直接使用它。请尝试以下方法:

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