我正在从视图中发布帖子并将其作为字符串添加到actionresult中。 我得到的价值是:
2014年2月18日星期二00:00:00 GMT-0300(Hora oficial do Brasil)
使用DateTime.Parse
会抛出异常:
字符串未被识别为有效的DateTime。
该字符串无效的原因是什么,以及如何将其成功转换为DateTime
?
答案 0 :(得分:8)
DateTime.Parse
会抛出此字符串的异常,因为它没有标准日期/时间格式。
如果您的字符串中GMT-0300 (Hora oficial do Brasil)
稳定,则可以使用;
var s = "Tue Feb 18 2014 00:00:00 GMT-0300 (Hora oficial do Brasil)";
var date = DateTime.ParseExact(s,
"ddd MMM dd yyyy HH:mm:ss 'GMT'K '(Hora oficial do Brasil)'",
CultureInfo.InvariantCulture);
Console.WriteLine(date);
输出将是;
2/18/2014 12:00:00 AM
除了使用字符串分隔符之外,我认为没有办法解析你的(Hora oficial do Brasil)
部分。
看看;
我不知道为什么K
说明符实际上不适用于Ideone。我必须将-0300
部分也作为字符串分隔符用于生成示例。这可能是DateTimeKind
enumeration的问题,但我不确定..
答案 1 :(得分:0)
由于'GMT'
和'(Hora oficial do Brasil)'
部分,该字符串无效。
简单地说:解析器无法确定什么是日期时间的一部分,什么不是。
通过使用格式字符串,您可以将字符串解析为DateTime格式。
请参阅:MSDN: Custom Date and Time Format Strings
在您的情况下,此格式字符串将起作用:"ddd MMM dd yyyy hh:mm:ss 'GMT'K '(Hora oficial do Brasil)'"
。
你可以像这样使用它:
string input = "Tue Feb 18 2014 00:00:00 GMT-0300 (Hora official do Brasil)";
string[] format = { "ddd MMM dd yyyy hh:mm:ss 'GMT'K '(Hora official do Brasil)'" };
DateTime date;
if (DateTime.TryParseExact(input, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
{
//Yepee the input was parsed correct
}
else
{
//system was unable to parse the string
}
或者像这样,如果错误处理不是必须的:
string input = "Tue Feb 18 2014 00:00:00 GMT-0300 (Hora official do Brasil)";
string format = "ddd MMM dd yyyy hh:mm:ss 'GMT'K '(Hora official do Brasil)'";
DateTime date = DateTime.ParseExact(input, format, CultureInfo.InvariantCulture);