C#解析为yyyy-MM-ddTHH:mm:ss格式字符串未被识别为有效的DateTime

Jul*_*uly -2 c# datetime

我试图解析Mon, 11 Mar 2019 09:13:16 +01002019-03-11T09:13:16

string dataa = "Mon, 11 Mar 2019 09:13:16 +0100";
DateTime d = new DateTime();
d = DateTime.ParseExact(dataa,"yyyy-MM-ddTHH:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine("data: "+d);
Run Code Online (Sandbox Code Playgroud)

但是错误是:

无法将字符串识别为有效的DateTime。

是否存在任何自动进行此解析的方法?谢谢大家。

Son*_*nül 6

使用时ParseExact,您的字符串和格式应完全匹配。

正确的格式为:(ddd, d MMM yyyy hh:mm:ss zzzHH取决于您的小时格式)

解析后,您需要使用来使用ToStringformat yyyy-MM-dd'T'hh:mm:ss格式化(或HH取决于您要使用12小时制还是24小时制

我认为我必须添加一些很多人容易混淆的解释(特别是对于编程的初学者)。一个DateTime实例根本具有任何格式。它只有日期和时间值,基本上是一个称为的数字值Ticks。当您谈论“格式”概念时,它指向的是文本表示形式string

因为您对“说” Mon, 11 Mar 2019 09:13:16 +01002019-03-11T09:13:16,所以我(可能还有很多人)假设您有一个字符串as,Mon, 11 Mar 2019 09:13:16 +0100并且您希望从中获得2019-03-11T09:13:16一个字符串。为此,您需要首先将字符串解析为DateTime。为此,就像您所做的那样,ParseExact是一种选择。

将其解析为时DateTime,将得到它的文本表示形式,即string带有ToString方法的。此方法有一些重载,应该使用ToString(String, IFormatProvider)重载。这样,您可以将输出格式指定为第一个参数,将区域性信息指定为第二个参数,这可能会由于:/格式说明符而影响结果字符串,因为它们可以根据当前区域性或所提供的区域性进行更改。

进一步阅读:自定义日期和时间格式字符串