C#DateTime.Parse错误

wsw*_*are 9 c# datetime

任何人都知道为什么会失败?我能够使用ParseExact解决它,但我想理解为什么它失败了.

DateTime test = DateTime.Parse("Dec 24  17:45");
Run Code Online (Sandbox Code Playgroud)

日期<"12月24日"工作正常.日期> = 12月24日因此错误失败:

mscorlib.dll中出现未处理的"System.FormatException"类型异常附加信息:日历System.Globalization.GregorianCalendar中不支持字符串表示的DateTime.

编辑:感谢Habib注意到即使我没有收到错误,也不是我期待的结果.所以当不使用支持的格式时要小心DateTime.Parse!

这是我为解决这个问题所做的工作.我只需要处理两种不同的格式.今年将是"MMM dd HH:mm"否则将是"MMM dd yyyy"

if (!DateTime.TryParseExact(inDateTime, "MMM dd HH:mm", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.AllowWhiteSpaces,out outDateTime))
{
    if (!DateTime.TryParseExact(inDateTime, "MMM dd yyyy", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.AllowWhiteSpaces, out outDateTime))
    {
        //Handle failure to Parse
    }
}
Run Code Online (Sandbox Code Playgroud)

Hab*_*bib 9

日期<"12月24日"工作正常.日期> = 12月24日因此错误而失败

DateTime.Parse使用标准格式来解析日期以及Day> = 24失败的原因是,它正在考虑将该部分视为小时部分而不是您假设的日期部分.

由于允许的小时部分可以在0到23之间,因此适用于那些日期.(它不被视为一天的一部分)

它也忽略了Dec部分并考虑该部分的当前日期.

考虑以下示例:

DateTime test = DateTime.Parse("Dec 22 17:45");
Run Code Online (Sandbox Code Playgroud)

它返回:

test = {23/02/2015 10:17:00 PM}
Run Code Online (Sandbox Code Playgroud)

查看时间部分设置为22:17或10:17 PM