Как насчет
DateTime lclTime = DateTime.Now;
DateTime ept = lclTime.ToUniversalTime().AddHours(
IsEasternDaylightSavingTime(
lclTime.ToUniversalTime())? -5: -4)
или, если у вас уже есть местный UTC, просто
DateTime lclUtc = DateTime.UtcNow;
DateTime ept = lclUtc.AddHours(
IsEasternDaylightSavingTime(lclUtc)? -5: -4)
Используйте статический словарь жестко закодированных значений для Spring-forward и резервных дат для восточного времени на следующие 50 лет. Это всего 300 байтов или около того ..., а затем индексируйте его, чтобы определить, будет ли летнее время включено восточное побережье ... Как уже указывалось, вам все равно, находится ли он в местной зоне или нет ...
private static bool IsEasternDaylightSavingTime(DateTime utcDateTime)
{
// hard coded method to determine
// whether utc datetime is Eastern Standard time
// or Eastern Daylight Time
}