Kobarin's Development Blog

C#やASP.NET、公開APIなどについての記録です。

C#で、RFC 882形式の日付をDateTimeに変換

結構厄介で、普通にDateTime.Parse(string)では変換できません。
Regexを使って文字列を少し組み替えてからParseしてやりましょう。

//変換対象となるRFC882形式日付。ここでは「2010/01/10 11:22:33」を示す。
string strInput = "Mon Jan 10 11:22:33 +0000 2010";

//置き換え規則
Regex reg = new Regex("^([A-Z][a-z][a-z]) ([A-Z][a-z][a-z]) ([0-9]{1,2}) ([0-9]{1,2}:[0-9][0-9]:[0-9][0-9]) (\\+[0-9]{4}) ([0-9]{4})$");

//曜日部分(ここでは「Mon」)を除去し、年「2010」を時間「11:22:33」の前に移動
string strReplace = reg.Replace(strInput, "$2 $3 $6 $4 $5");

//実行
DateTime dtAfter = DateTime.Parse(strReplace);

もうちょっとスムーズにならんのかね・・・