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

10-16 17:05