下記のような、メールヘッダのDate値を変換する。
Date: Sun, 02 Jul 2006 19:45:13 +0100
CultureInfoを en-US にしないと、曜日、月の省略語を正しく認識できない。

// 変換に失敗すると FormatException を投げる。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
public static DateTime ParseMailDate(string field){
    // (JST) などを取り払う
    int i = field.LastIndexOf("(");
    if (i > -1){
    field = field.Substring(0, i).TrimEnd();
    }
    string[] expectedFormats = {"ddd, d MMM yyyy HH':'mm':'ss zzz",
    "ddd, d MMM yyyy H':'m':'s zzz", "d MMM yyyy HH':'mm':'ss zzz",
    "ddd, d MMM yyyy HH':'mm':'ss", "ddd, d MMM yyyy H':'m':'s",
    "d MMM yyyy HH':'mm':'ss"};
    // ゴミがあったら削除
    if (field.Length > 31) {
    field = field.Substring(0, field.LastIndexOf(' ') \- 1);
    }
    return System.DateTime.ParseExact(field, expectedFormats,
    System.Globalization.CultureInfo.GetCultureInfo("en-US"),
    System.Globalization.DateTimeStyles.None);
}