用于.NET的强大的DateTime解析器库

Fra*_*ger 7 .net datetime parsing xamarin.ios

我正在用C#(技术上是MonoTouch)编写RSS和Mail阅读器应用程序.

我遇到了解析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;
}
Run Code Online (Sandbox Code Playgroud)

这让我感到恶心.两点.(1)我认为我实际上可以收集一份涵盖所有内容的格式列表,这对我来说很愚蠢.(2)这是错的!请注意,我将EST日期时间视为UTC(因为.NET似乎无视时区).

我正在寻找一个已知的处理大量这些格式的现有库(仅限源代码).

此外,我想在我的代码中继续使用UTC DateTimes,因此建议的任何库都应该能够生成DateTimes.

这有什么事吗?

更新我的请求似乎不清楚.我正在寻找一个知道很多这些狂野格式字符串的库.DateTime.Parse/DateTime.TryParse只知道几种格式,他们肯定不懂时区(你可以看到我已经在使用它了).我需要比DateTime.Parse/DateTime.TryParse更强大的东西.

更新2每个人都在思考我使用的是Parse而不是TryParse.我已经切换了代码.但它仍然是错误和不完整的.

Dav*_*vid 2

您是否尝试过仅使用DateTime.TryParse?该函数已经可以处理大多数格式。