1

数据库中的日期/时间数据存储为 Oracle Time Stamp with Time Zone (02-FEB-2013 13:25:00 US/PACIFIC)。当我读取数据时,我需要确定这个时间与用户当前本地时间之间的差异。使用上面,我可以得到用户的本地时间偏移:

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

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

4

1 回答 1

1

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

相反,请使用 TZDB 实现,例如NodaTime。它对这些类型的时区有充分的认识,并且可以进行您正在寻找的计算类型。

顺便说一句-US/Pacific实际上是America/Los_Angeles. 您可以在此处找到这些时区的列表。

更新

抱歉,我忽略了您正在使用OracleTimeStampTZ. 这似乎已经实现了 TZDB,因此您应该可以直接使用它。尝试以下操作:

var span = DateTime.UtcNow - dtzLastActivity.ToUniversalTime().Value;
于 2013-03-04T18:39:54.733 回答