Во-первых, есть несколько вещей, которые вы должны рассмотреть. Вам приходится иметь дело с переходом на летнее время, которое время от времени меняется (даты начала и окончания менялись дважды за последние 10 лет). Таким образом, в зимнем северном полушарии восточное время составляет -5 по Гринвичу (или UTC). Но летом это -6 по Гринвичу или это -4 по Гринвичу, я никогда не могу держать это прямо (и не должен).
Существуют некоторые функции библиотеки DNF для работы с информацией о часовом поясе, однако вам действительно нужен .net 3.5 для наиболее полезных вещей. В .net 3.5 есть класс TimeZoneInfo.
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime dt = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now,
TimeZoneInfo.IsDaylightSavingsTime(tzi) ?
tzi.DaylightName : tzi.StandardName);
if (dt.Hour == 17)
....
Кроме того, имейте в виду, что два раза в год час теряется или набирается, поэтому вы также должны учитывать это, если, например, у вас есть таймер обратного отсчета, на котором отображается «время до следующей обработки» или что-то в этом роде. Дело в том, что обработка времени не так проста, как кажется на первый взгляд, и существует множество крайних случаев.