繁体   English   中英

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

[英]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 +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);

但错误是:

字符串未被识别为有效的 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM