如何将此字符串转换为日期?

时间:2014-02-18 13:23:02

标签: c# .net string datetime

我正在从视图中发布帖子并将其作为字符串添加到actionresult中。 我得到的价值是:

  

2014年2月18日星期二00:00:00 GMT-0300(Hora oficial do Brasil)

使用DateTime.Parse会抛出异常:

  

字符串未被识别为有效的DateTime。

该字符串无效的原因是什么,以及如何将其成功转换为DateTime

2 个答案:

答案 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

这是demonstration

除了使用字符串分隔符之外,我认为没有办法解析你的(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);