日付を RFC1123 形式で解析しようとしています (Thu, 21 Jan 2010 17:47:00 EST)。
これが私が試したものですが、どれもうまくいきませんでした:
DateTime Date = DateTime.Parse(dt);
DateTime Date = DateTime.ParseExact(dt, "r", null);
次のようなことを試しましたか:
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());
私はまだそれをテストしていません (すぐにテストします)... しかし、それでうまくいくと思います。
編集: 問題は、タイムゾーンは常に GMT である必要があると RFC1123 が述べていることのようです...これが、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 オフセットのリストを次に示します。