-3

我想我错过了文化信息?(我不知道它是什么)。我从 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

4 回答 4

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

延伸阅读

于 2013-07-16T10:44:29.533 回答
1

你可以使用这个:

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

注意:如果您的字符串与您提供的格式不完全匹配(请参阅ParseExact)......那么它将不起作用。

于 2013-07-16T10:45:25.997 回答
1
DateTime.ParseExact("Tue Jul 16 07:56:04 +0000 2013", 
                    "ddd MMM dd HH:mm:ss zzzz yyyy", 
                    CultureInfo.InvariantCulture);

演示

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

于 2013-07-16T10:48:40.360 回答
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); 
于 2013-07-16T10:45:20.740 回答