我正在用C#(技術上是MonoTouch)編寫RSS和郵件閱讀器應用程序。強大的DateTime .NET解析器庫
我遇到了解析DateTime
的問題。我看到日期是如何在野外提出並已開始寫一個函數像這樣的很多方差:
static string[] DateTimeFormats = new string[] {
"ddd, d MMM yyyy H:mm:ss \"GMT+00:00\"",
"d MMM yyyy H:mm:ss \"EST\"",
"yyyy-MM-dd\"T\"HH:mm:ss\"Z\"",
"ddd MMM d HH:mm:ss \"+0000\" yyyy",
};
public static DateTime ParseTime(string timeStr) {
var r = DateTime.MinValue;
var styles = DateTimeStyles.AdjustToUniversal |
DateTimeStyles.AllowWhiteSpaces;
if (DateTime.TryParse(timeStr,
CultureInfo.InvariantCulture,
styles,
out r)) {
return r;
}
else {
if (DateTime.TryParseExact(timeStr,
DateTimeFormats,
CultureInfo.InvariantCulture,
styles,
out r)) {
return r; // BUGGY! Ignores time zone!!
}
}
Console.WriteLine ("BAAAAAAAAAAAAD");
return DateTime.MinValue;
}
這,好吧,讓我感到噁心。兩點。 (1)我認爲我實際上可以收集一份格式列表,這將涵蓋所有內容,這很愚蠢。 (2)這是錯的!請注意,我將EST日期時間視爲UTC(因爲.NET似乎無視時區)。
我正在尋找一個已知的庫來處理一堆這些格式。
此外,我想繼續在我的代碼中使用UTC日期時間,所以建議任何庫應該能夠產生日期時間。
有沒有像這樣的東西?
更新這似乎我不清楚在我的要求。我正在尋找一個知道很多這些wild格式字符串的庫。 DateTime.Parse/DateTime.TryParse只知道幾種格式,而且他們當然不懂時區(你可以看到我已經在使用它)。我需要比 DateTime.Parse/DateTime.TryParse更強大的功能。
更新2每個人都在談論我使用Parse而不是TryParse的事實。我已經切換了代碼。 但它仍然是錯誤的和不完整的。
最後野田時可以提供一些這方面的功能:http://code.google.com/p/noda-time/ – TrueWill 2010-03-31 19:41:44
可能想查看[datetime-tryparse-all-possible-type-of-dates](http://stackoverflow.com/questions/2326127/datetime-tryparse-all-possible-type-of-日期) – nawfal 2014-01-30 09:42:32