Что ж, если всегда будет в восточное дневное время, вы можете сделать что-то вроде:
// Parse string. We don't need escaping since E,D and T
// are not considered special characters by ParseExact.
var dateTimeInEasternTime = DateTime.ParseExact("Apr 18 2011 19:30 EDT",
"MMM dd yyyy HH:mm EDT",
CultureInfo.InvariantCulture);
// Convert from the relevant timezone to UTC.
var dateTimeInUTC = TimeZoneInfo.ConvertTime
(dateTimeInEasternTime,
TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"),
TimeZoneInfo.Utc);
Вы можете кэшировать TimeZoneInfo
, представляющий EST (который становится EDTв то время как летнее время включено), чтобы предотвратить поиск.
Если строка может заканчиваться трехбуквенным кодом, представляющим некоторый произвольный часовой пояс, это будет намного сложнее, так какЕсть много соглашений для них, ни одно из которых (AFAIK) в настоящее время не поддерживается .NET.Лучше всего сначала создать поиск по коду для соответствующего TimeZoneInfo
(возможно, через свойство Id
), после чего вы можете выполнить преобразование с помощью TimeZoneInfo.ConvertTime
как обычно.