Hai provato qualcosa di simile:
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());
non ho ancora testato (volontà in pochi istanti) ... ma credo che lo farà per te.
Modifica: Sembra che il problema sia che RFC1123 afferma che il fuso orario dovrebbe essere sempre GMT ... motivo per cui r o R non ha funzionato come formato per te. Il problema è l'EST. Il modello sopra rappresenta EST, ma è statico quindi se hai un altro fuso orario potresti essere nei guai. La soluzione migliore sarebbe quella di andare con lo standard RFC1123 e andare al GMT e dovrebbe risolvere il tuo problema. Se non puoi, fammi sapere che potrei avere una soluzione.
Modifica 2: Questa non è una soluzione completa, ma ciò che fa isola il fuso orario e consente comunque di analizzarlo. Il codice non conosce il fuso orario che viene presentato, ma puoi lanciare un'abbreviazione del fuso orario e analizzerà il tempo. Se vuoi convertire in GMT e quindi usare r o R puoi prendere il risultato della corrispondenza regolare, metterlo contro una tabella di ricerca (per vedere quale ora lo compensa per quella sigla del fuso orario), quindi convertire l'ora in GMT e analizzare da lì. Questa sarebbe una buona soluzione, ma un po 'più di lavoro. Ecco il codice:
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();
Ecco una lista di offset UTC per voi, se si desidera trasformare questo in un convertitore di fuso orario:
Timezone Abbreviations with UTC offsets
Ha senso. Ma il problema è che non ho il controllo sul formato della data come proviene da una fonte esterna. Qualche modo per convertire il fuso orario non GMT in base al GMT e quindi applicare "r" o "R" ?? – Moon
Vorrei avere una risposta migliore di quello che sto per dirti ma ... le abbreviazioni non sono riconosciute., Ho una soluzione ma non è divertente o elegante. Lo posterò e incrocerò le dita che qualcun altro può aiutarti meglio di me! Mi dispiace molto. –
Non è perfetto ma molto meglio! :) Apprezzo il tuo aiuto, lo faccio davvero :) – Moon