我想我想念文化信息? (我不知道它是什么)。 我从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.
个例外。我该怎么用?
答案 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);
请注意,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);