2013-03-04 6 views
1

Данные о дате/времени в базе данных хранятся в формате Oracle Time Stamp с часовым поясом (02-FEB-2013 13:25:00 US/PACIFIC). Когда я прочитал данные, мне нужно определить разницу между этим временем и текущим местным временем пользователя. Используя выше, я могу получить местное время пользователя смещение:Получить местное время пользователя

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

Могу ли я получить местное время, может быть, с помощью TimeZoneInfo, зная только смещение, так что я могу затем вычесть время в базе данных из местного времени, чтобы получить разницу ?

ответ

1

US/Pacific - это идентификатор часового пояса IANA/Olson - не идентификатор часового пояса Windows. Поэтому вы не можете использовать классы TimeZoneInfo.

Вместо этого используйте реализацию TZDB, такую ​​как NodaTime. Он полностью осознает эти типы часовых поясов и может выполнять тип расчета, который вы ищете.

BTW - US/Pacific как фактически псевдоним для America/Los_Angeles. Вы можете найти список этих часовых поясов here.

UPDATE

К сожалению, я проглядел, что вы используете OracleTimeStampTZ. Этот appears уже реализует TZDB, поэтому вы можете использовать его напрямую. Попробуйте следующее:

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

@Aristos Я думаю, что не понял, что мне нужно. Мне нужна разница во времени между тем, что находится в базе данных, а не локальным временем пользователя, но местным временем такого же смещения. Итак, если столбец содержит дату/время для Тихого океана, без учета того, где пользователь просматривает данные, мне нужно получить местное время Тихого океана, чтобы показать разницу. – NoBullMan

+0

Спасибо, Мэтт, вот что мне нужно. – NoBullMan