C# - DateTime.TryParse问题 - 为什么它不喜欢我的日期字符串表示?

时间:2013-09-30 23:47:47

标签: c# datetime tryparse

这是我的代码:

            DateTime Dob = Convert.ToDateTime("1/1/1800");
            DateTime Dod = Convert.ToDateTime("1/1/1800");

            if (!DateTime.TryParse(p.birthday, out Dob) && !DateTime.TryParse(p.deathday, out Dod))
            {
                // handle error
            }

p.birthday是:

enter image description here

p.deathday是:

enter image description here

.TryParse()代码点击时,Dob的DateTime对象为:

enter image description here

Dod的DateTime对象是:

enter image description here

问题:为什么Dod仍为“1-1-1800”(我指定的初始值),但Dob设置正确?关于“2007-02-28”的Dod值有什么不喜欢的吗?

2 个答案:

答案 0 :(得分:3)

DateTime.TryParse(p.birthday, out Dob)成功将string转换为DateTime,因此返回true。你用!反转它,给出错误。

当执行到达&&运算符时,它看到第一个操作数已经是false,因此不会打扰执行第二个操作数。

您既可以预先执行,也可以使用非快捷方式AND运算符&

编辑:或

if (!(DateTime.TryParse(p.birthday, out Dob) || DateTime.TryParse(p.deathday, out Dod)))
{
    ...
}

答案 1 :(得分:1)

原因是它正在执行!(DateTime.TryParse(p.birthday,out Dob)并返回false。 因此!不执行DateTime.TryParse(p.deathday,out Dod)。

根据

http://msdn.microsoft.com/en-us/library/2a723cdk.aspx

x && y

if x is false, y is not evaluated, because the result of the 
AND operation is false no matter what the value of y is. This is known as 
"short-circuit" evaluation.