Вы пробовали что-то вроде:
string dateString, format;
DateTime result;
CultureInfo provider = CultureInfo.InvariantCulture;
dateString = "Thu, 21 Jan 2010 17:47:00 EST";
format = "ddd, dd MMM yyyy hh:mm:ss EST";
result = DateTime.ParseExact(dateString, format, provider);
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
Я еще не проверял это (через несколько минут) ... но я верю, что это поможет вам.
Редактировать: Кажется, проблема в том, что RFC1123 утверждает, что часовой пояс всегда должен быть GMT ... именно поэтому r или R не работали в качестве формата для вас. Проблема в EST. Приведенный выше шаблон учитывает EST, но он статичен, поэтому при наличии другого часового пояса у вас могут возникнуть проблемы. Лучшим решением было бы перейти со стандартом RFC1123 и перейти на GMT, и это должно решить вашу проблему. Если вы не можете, дайте мне знать, что у меня может быть решение.
Редактировать 2: Это не полное решение, но то, что оно делает, оно изолирует часовой пояс и все же позволяет вам его анализировать. Код не знает часовой пояс, в котором он представлен, но вы можете добавить к нему любое сокращение часового пояса, и оно будет анализировать время. Если вы хотите преобразовать в GMT, а затем использовать r или R, вы можете взять результат соответствия регулярному выражению, сопоставить его с таблицей поиска (чтобы узнать, какое время смещено для этой аббревиатуры часового пояса), затем преобразовать время в GMT и разбери оттуда. Это было бы хорошим решением, но немного больше работы. Вот код:
string dateString, format, pattern, tz;
DateTime result;
CultureInfo provider = CultureInfo.InvariantCulture;
pattern = @"[a-zA-Z]+, [0-9]+ [a-zA-Z]+ [0-9]+ [0-9]+:[0-9]+:[0-9]+ (?<timezone>[a-zA-Z]+)";
dateString = "Thu, 21 Jan 2010 17:47:00 EST";
Regex findTz = new Regex(pattern, RegexOptions.Compiled);
tz = findTz.Match(dateString).Result("${timezone}");
format = "ddd, dd MMM yyyy HH:mm:ss " + tz;
try
{
result = DateTime.ParseExact(dateString, format, provider);
Console.WriteLine("Timezone format is: {0}", format);
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException)
{
Console.WriteLine("{0} is not in the correct format.", dateString);
}
Console.ReadLine();
Вот список смещений UTC для вас, если вы хотите превратить это в преобразователь часового пояса:
Сокращения часовых поясов со смещением UTC