Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对yyyy-MM ddTHH:MM:ss格式字符串的C#解析未被识别为有效的日期时间_C#_Datetime - Fatal编程技术网

对yyyy-MM ddTHH:MM:ss格式字符串的C#解析未被识别为有效的日期时间

对yyyy-MM ddTHH:MM:ss格式字符串的C#解析未被识别为有效的日期时间,c#,datetime,C#,Datetime,我正在尝试将2019年3月11日星期一09:13:16+0100解析为2019-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.InvariantC

我正在尝试将2019年3月11日星期一09:13:16+0100解析为2019-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);
但错误在于:

字符串未被识别为有效的日期时间

是否有任何方法可以自动执行此解析?谢谢大家

更新


正如下面提到的,与其他用户回复我的一样,我首先需要函数ToString(String,IFormatProvider)。

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

正确的格式为:
ddd,d MMM yyy hh:mm:ss zzz
(或
hh
,具体取决于您的小时格式)

解析后,需要使用
ToString
将其格式化为
yyyy-MM-dd'T'hh:MM:ss
格式(或
hh
,具体取决于您想要的格式或格式)

我想我必须多加一点解释,这让很多人感到困惑(特别是那些编程新手)。实例没有任何格式。它只有日期和时间值,基本上是一个称为的数字值。当你谈到“格式”的概念时,它指向文本表示,即
string

由于您说过“
2019年3月11日星期一09:13:16+0100
2019-03-11T09:13:16
”,我(可能还有很多人)假设您有一个字符串作为
2019年3月11日星期一09:13:16+0100
,您希望从中获得
2019-03-11T09:13:16
。为此,首先需要将字符串解析为DateTime。为此,正如您所做的那样,
ParseExact
是一个选项

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


进一步阅读:

您需要指定输入数据的格式(DateTime.ParseExact的第二个参数)。在您的情况下,您提供的数据的格式为
ddd,d MMM yyy hh:mm:ss zzz
。另外,在最后一行,在打印结果的地方,您必须对其进行格式化

所以,你必须这样做:

string dataa = "Mon, 11 Mar 2019 09:13:16 +0100";
DateTime d = new DateTime();
d = DateTime.ParseExact(dataa, "ddd, d MMM yyyy hh:mm:ss zzz", System.Globalization.CultureInfo.InvariantCulture);
Console.WriteLine("data: " + d.ToString("yyyy-MM-dd'T'hh:mm:ss"));

您要求计算机解析格式为yyyy-MM-ddTHH:MM:ss的字符串-但这与您提供的字符串格式完全不同(2019年3月11日星期一09:13:16+0100)。请注意,DateTime值没有格式-听起来您需要执行两个操作,第一个是将原始值解析为DateTime,第二个是将DateTime格式化为字符串。解析是将字符串转换为其他内容-这里是一个
DateTime
,在这一点上,它没有格式(只是从
01/01/0001
开始的100ns间隔计数)。您的字符串看起来不像
yyyy-MM-ddTHH:MM:ss
。如果试图解析它并告诉系统字符串就是这个样子,那么就不会有多大进展。