无论文化信息如何,C# 都解析为日期时间

C# parsing to datetime regardless of culture info

我在解析某些语言不是英语的日期字符串时遇到问题。 示例日期字符串为“8 avril 2016 vendredi”,英文为“8 april 2016 friday”。

我已经试过了,但没有成功。

DateTime dateTime;
DateTime.TryParse("8 avril 2016 vendredi", CultureInfo.InvariantCulture, DateTimeStyles.None, out dateTime);

在我的例子中,日期字符串可以是任何语言,所以我无法在解析中指定区域性。
我感谢您的帮助。谢谢

看哪,任何解析器都可怕!

CultureInfo.GetCultures(CultureTypes.AllCultures).Select(culture => {
    DateTime result;
    return DateTime.TryParse(
        "8 avril 2016 vendredi", 
        culture, 
        DateTimeStyles.None, 
        out result
    ) ? result : default(DateTime?);
})
.Where(d => d != null)
.GroupBy(d => d)
.OrderByDescending(g => g.Count())
.FirstOrDefault()
.Key

这会要求系统中的每个文化解析日期,并选择出现频率最高的日期作为 "winner"。它 returns null 如果没有文化可以解析日期。

不难想出无法提供正确结果的原因,因为最常见的结果不一定是正确的,而且某些日期确实不明确。 “04-05-2016”是五月四日还是四月五日? any 解析器认为五月四日更有可能是因为更多的文化以这种方式解析它。至少在我的机器上。但这不会取悦美国作家(他们在互联网上的代表过多),所以也许需要考虑文化的可能性。

此代码不应用于解析任意用户输入,更不用说所有输入了,即使在真正缺乏关于该语言的所有其他线索的爬虫上下文中,这也可能不是最佳方法。还要注意这很慢;一台普通机器上有数百种文化。首先猜测页面的整体文化,然后根据它不断地解析绝对是一个更好的主意。