.NET メールのDateフィールド値をDateTimeに変換

April 24, 2007

下記のような、メールヘッダの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);
}
.NET

tilfin freelance software engineer