【发布时间】:2010-03-31 18:19:43
【问题描述】:
我正在用 C#(技术上是 MonoTouch)编写一个 RSS 和邮件阅读器应用程序。
我遇到了解析DateTimes 的问题。我发现在野外显示日期的方式存在很大差异,因此我开始编写这样的函数:
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 DateTimes,因此建议的任何库都应该能够生成 DateTimes。
有这样的东西吗?
更新我的请求似乎不清楚。我正在寻找一个了解很多这些 wild 格式字符串的库。 DateTime.Parse/DateTime.TryParse 只知道几种格式,而且他们当然不了解时区(您可以看到我已经在使用它)。我需要比 DateTime.Parse/DateTime.TryParse.
更新 2 每个人都在思考我使用 Parse 而不是 TryParse 的事实。我已经切换了代码。 但它仍然是错误和不完整的。
【问题讨论】:
-
最终 noda-time 可能会提供其中一些功能:code.google.com/p/noda-time
标签: .net datetime parsing xamarin.ios