我该如何解析这个日期?

时间:2013-07-16 10:38:54

标签: c# datetime

我想我想念文化信息? (我不知道它是什么)。 我从json那里得到这个日期:

<created_at>Tue Jul 16 07:56:04 +0000 2013</created_at>

但如果我尝试:

var CreatedAt = DateTime.ParseExact((string)x["created_at"], "yyyy-MM-dd", null)

我收到String was not recognized as a valid DateTime.个例外。我该怎么用?

4 个答案:

答案 0 :(得分:1)

尝试使用此模式仅匹配日期:

ddd MMM dd HH:mm:ss zzz yyyy

var input = "Tue Jul 16 07:56:04 +0000 2013";
var pattern = "ddd MMM dd HH:mm:ss zzz yyyy"
var result = DateTime.ParseExact(input, pattern, CultureInfo.InvariantCulture);
Console.WriteLine(result.ToUniversalTime()); // 7/16/2013 7:56:04 AM

或者这是为了匹配日期周围的XML标签:

'<created_at>'ddd MMM dd HH:mm:ss zzz yyyy'</created_at>'

var input = "<created_at>Tue Jul 16 07:56:04 +0000 2013</created_at>";
var pattern = "'<created_at>'ddd MMM dd HH:mm:ss zzz yyyy'</created_at>'";
var result = DateTime.ParseExact(input, pattern, CultureInfo.InvariantCulture);
Console.WriteLine(result.ToUniversalTime()); // 7/16/2013 7:56:04 AM

进一步阅读

答案 1 :(得分:1)

您可以使用:

DateTime.ParseExact((string)x["created_at"], "ddd MMM dd hh:mm:ss zzzz yyyy", CultureInfo.InvariantCulture);

注意:如果您的字符串与您提供的格式完全不符(请参阅Parse 完全),那么它将无效。

答案 2 :(得分:1)

DateTime.ParseExact("Tue Jul 16 07:56:04 +0000 2013", 
                    "ddd MMM dd HH:mm:ss zzzz yyyy", 
                    CultureInfo.InvariantCulture);

Demo

请注意,HH为24小时格式,而不是hh

答案 3 :(得分:0)

那是因为ParseExact意味着您告诉方法您的日期是完全格式(显然不是这样)。

有问题的日期似乎是一种非常具体的格式,您需要执行以下操作:

DateTime.ParseExact((string)x["created_at"], "ddd MMM dd hh:mm:ss zzzz yyyy", null);

根据您的评论,您的应用程序似乎在不了解所提供的日期/时间格式的文化下运行 - 传递null将隐式使用当前文化(通常是机器的文化) 。在这种情况下,您需要传递CultureInfo.InvariantCulture而不是null,因此可以解析字符串,而不依赖于在解析过程中强制执行的任何本地规则/局部化。即

DateTime.ParseExact((string)x["created_at"], "ddd MMM dd hh:mm:ss zzzz yyyy", CultureInfo.InvariantCulture);