检查字符串是否有效日期

时间:2014-11-11 06:08:36

标签: c# validation datetime

我想检查字符串是否是有效的DateTime,但是遇到了一些麻烦。首先,我知道DateTime.TryParse并且我无法使用它,因为它需要DateTime作为out参数,并且我没有一个可用。< / p>

我的课程有2个公共属性,NameDOB。我可以通过单击按钮更新个人Person的这些属性。所以我认为在我的Button Click事件中,我会首先检查传递的字符串是否有效DateTime

private void Button_Click_2(object sender, EventArgs e)
{
    if (listBoxPeople.SelectedIndex != -1 && DateTime.TryParse(textBoxDOB.Text, out new DateTime()))
    {
        Person p = listBoxPeople.SelectedItem as Person;
        p.Name = textBoxName.Text;
        p.DOB = DateTime.Parse(textBoxDOB.Text);
    }
}

但是,这样做很有效,它会抛出一个错误,指出out参数必须是可分配的。

所以我尝试使用TryParse并将out参数设为对象的DOB属性,如下所示:

private void Button_Click_2(object sender, EventArgs e)
{
    if (listBoxPeople.SelectedIndex != -1)
    {
        Person p = listBoxPeople.SelectedItem as Person;
        p.Name = textBoxName.Text;
        DateTime.TryParse(textBoxDOB.Text, out p.DOB);
    }
}

但这也引发了一个错误,说

  

属性不能作为out或ref参数传递

是否隐藏某个函数只返回一个字符串是否有效DateTime,而不需要任何out个参数?

2 个答案:

答案 0 :(得分:1)

这样的东西?

private void Button_Click_2(object sender, EventArgs e)
{
    DateTime tempDate;
    if (listBoxPeople.SelectedIndex != -1 && DateTime.TryParse(textBoxDOB.Text, out tempDate))
    {
        Person p = listBoxPeople.SelectedItem as Person;
        p.Name = textBoxName.Text;
        p.DOB = tempDate;
    }
}

答案 1 :(得分:-1)

使用以下

DateTime.ParseExact(textBoxDOB.Text, "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture)

而不是

DateTime.TryParse(textBoxDOB.Text, out new DateTime())