看哪,可怕的任何解析器!
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
这要求系统上的每种文化解析日期,并选择最常出现的日期作为“赢家”。null
如果没有文化可以解析日期,则返回。
不难想到无法提供正确结果的方法,因为最常见的结果不一定是正确的,而且有些日期确实模棱两可。“04-05-2016”是 5 月 4 日还是 4 月 5 日?任何解析器都认为 5 月 4 日更有可能仅仅是因为更多的文化以这种方式解析它。至少在我的机器上。但这不会取悦美国作者(他们在互联网上的比例过高),所以也许需要考虑文化的可能性。
这段代码不应该用来解析任意用户输入,更不用说所有输入了,甚至在一个真正缺乏关于语言的所有其他线索的爬虫的上下文中,这可能不是最好的方法。还要注意这很慢;一台普通的机器上有数百种文化。首先猜测页面的整个文化,然后在此基础上持续解析绝对是一个更好的主意。