C# 将YYYYMMDD和DDMMYYYY两种不同格式的日期字符串转换为c中的日期#

C# 将YYYYMMDD和DDMMYYYY两种不同格式的日期字符串转换为c中的日期#,c#,datetime,C#,Datetime,尝试了下面的格式,但只处理一种格式 string date = "20100102"; DateTime datetime = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture); 而不是 DateTime datetime = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCultu

尝试了下面的格式,但只处理一种格式

string date = "20100102";
DateTime datetime = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture);
而不是

 DateTime datetime = DateTime.ParseExact(date, "yyyyMMdd", 
                          CultureInfo.InvariantCulture);
……试试看:

var dateString = "20100102";
var formats = new String[]{"yyyyMMdd", 
               "ddMMyyyy"};
DateTime dateValue;
if (DateTime.TryParseExact(dateString, formats, 
                                    CultureInfo.InvariantCulture, 
                                    DateTimeStyles.None, 
                                    out dateValue))
    Console.WriteLine ("Success");
MSDN在
DateTime.TryParseExact
上有这样一句话:

使用指定的格式数组、区域性特定格式信息和样式,将日期和时间的指定字符串表示形式转换为其等效的日期时间字符串表示的格式必须至少与指定格式中的一种完全匹配。该方法返回一个值,该值指示转换是否成功

告诉我更多

请指定为什么您甚至可以从YYYYMMDD或DDMMYYYY开始接收数据。在早些时候,一定有什么地方出了问题,才会发生这种情况。没有明确的方法来区分这两种格式。所以,你不应该让他们从你喜欢的开始说起。@Christopher实际上这是一个合法的案例。我曾经不得不解析用户创建的文本文件,而不是每个人都使用相同的日期约定。我们都在同一个地方too@MickyD如我所说,以前出了点问题。比如在创建文本文件时。您应该确保在创建文件时每个人都遵循一种固定的日期时间格式。或以日/月/年作为单独字段的CSV文件。如果你曾经得到像“20122011”这样的数据,你就不可能弄清楚这两种风格是哪一种。这就是为什么您不能可靠地暗示一种格式。必须知道日期。@Christopher这些日期来自excel上载,因此不同的文件具有不同的日期格式。@Christopher只有在您认为2012年、第20个月、第11天有效时,示例20122011才不明确。我认为,如果一个日期可能在公元13世纪(由
System.DateTime
支持),就会出现歧义。可能的示例:
“20111220”
(2011-Dec-20或1220年11月20日)。问题是,实际上您可能会遇到类似“20122011”的值。解析的两种变体都是有效的,但结果将是一个字面上的年份。您可以尝试猜测,就像WebBrowser猜测编码一样,但它始终是一个猜测:@Christopher true,但OP不寻找YYYYDDMM。TryParseExact专为您事先不知道确切格式的情况而设计。我发现它在我之前的项目中工作得非常好mentioned@MickyD谢谢,但它返回的是一个假的20180808@Prince正确的格式是
yyyyymmdd
ddMMyyyy
y
d
必须为小写。我试过20180808,它返回的是真的哇!感谢您发现这一点,并编辑@currapickt:)