我正在用C#(从技术上讲是MonoTouch)编写一个RSS和邮件阅读器应用程序。
我遇到了解析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 DateTimes,因此无论建议使用什么库,都应该能够产生DateTimes。
那里有什么东西吗?
更新似乎我的要求不清楚。我正在寻找一个知道很多这些野生格式字符串的图书馆。 DateTime.Parse / DateTime.TryParse仅知道几种格式,并且它们当然不理解时区(您可以看到我已经在使用它了)。我需要的东西比
DateTime.Parse / DateTime.TryParse。
更新2每个人都对我使用Parse而不是TryParse的事实感到困惑。我已经切换了代码。但这仍然是错误和不完整的。
最佳答案
除了DateTime上的TryParse
,. Net还提供DateTimeOffset
结构,该结构提供对UTC偏移的访问,作为该结构上的另一个属性,使您可以将时区信息和datetime信息一起存储。
MSDN article
关于.net - NET的健壮DateTime解析器库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2555404/