[英]C# DateTime Conversion from yyyy-MM-ddTHH:mm:ss to dd MMM yyyy
[英]C# Parse to the yyyy-MM-ddTHH:mm:ss format String was not recognized as a valid DateTime
我正在尝试解析Mon, 11 Mar 2019 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);
但错误是:
字符串未被识别为有效的 DateTime。
是否有任何方法可以自动进行此解析? 谢谢大家。
更新
如下所述,就像其他用户回复我一样,我首先需要函数 ToString(String, IFormatProvider)。
当您使用ParseExact
,您的字符串和格式应该完全匹配。
正确的格式是: ddd, d MMM yyyy hh:mm:ss zzz
(或HH
,取决于您的小时格式)
解析后,您需要使用ToString
将其格式化为yyyy-MM-dd'T'hh:mm:ss
格式(或HH
取决于您想要12 小时制还是24 小时制格式)
我想我必须添加一些很多人混淆的解释(特别是编程初学者)。 一个DateTime
实例没有任何格式。 它只有日期和时间值,基本上是一个名为Ticks
的数值。 当您谈论“格式”概念时,它指向文本表示,即string
。
由于您说“ Mon, 11 Mar 2019 09:13:16 +0100
to 2019-03-11T09:13:16
”,我(可能还有很多人)假设您有一个字符串作为Mon, 11 Mar 2019 09:13:16 +0100
并且您想从中获取2019-03-11T09:13:16
作为字符串。 为此,您需要先将字符串解析为 DateTime。 为此,正如您所做的那样, ParseExact
是一种选择。
当您将其解析为DateTime
,您会使用ToString
方法获得它的文本表示形式,即string
。 此方法有一些重载,您应该使用ToString(String, IFormatProvider)
重载。 这样,您将输出格式指定为第一个参数,将您的文化信息指定为第二个参数,由于:
和/
格式说明符,这可能会影响您的结果字符串,因为它们可以根据当前文化或提供的文化进行更改。
进一步阅读: 自定义日期和时间格式字符串
您需要指定输入数据的格式( DateTime.ParseExact
的第二个参数)。 在您的情况下,您提供的数据格式为ddd, d MMM yyyy 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"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.