我正在用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