C# 中的日期时间解析问题

3

当日期格式为 mm/dd/yyyy 时,datetime 解析工作正常,但当日期格式为 dd/mm/yyyy 时,就会出现问题。我想编写代码以解析任何格式的日期。

例如,如果我的日期格式为 "15/01/2012" 或 "05/12/2012",那么我的代码应该能够将其解析为有效的 datetime。那我应该怎么做呢?我可以使用以下代码:

IFormatProvider culture = new System.Globalization.CultureInfo("en-US", true);
string xxx = DateTime.ParseExact("15/12/2012", "yyyyMMdd", culture).ToString();

它无法正常工作是因为日期格式为dd/mm/yyyy。那么请告诉我最好的解决方案,即当日期格式为dd/mm/yyyy或mm/dd/yyyy等时,代码可以正确解析它。请指导我应该使用什么代码。谢谢。


3
如果日期的格式在"月/日/年"和"日/月/年"之间变化,而没有指示使用哪种格式,那么你就会面临问题。例如,1/2/1996是哪一天呢?你需要更多信息才能选择正确的格式,电脑猜测比人类还要差:) - Joachim Isaksson
2个回答

7
您不能同时允许使用MM/dd/yyyy和dd/MM/yyyy格式而没有任何指示使用哪种格式,否则您只会得到错误的数据。如果您看到"06/05/2011",您会将其解释为5月6日还是6月5日呢?
您应该明确指定日期格式,或者使用文化默认值(不应允许两种格式共存) - 但仅因为日期值恰好为13就将"13/12/2011"与"11/12/2011"区别对待是一个非常糟糕的想法,我认为。
(您的示例代码无法正常工作的原因是您明确表示要将其解析为yyyyMMdd格式,这显然不是"15/12/2012"的格式。我不确定您为什么会期望它能够正常工作。)

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接