如何在 C # 中验证日期时间?

我怀疑我是唯一一个想出这个解决方案的人,但是如果你有一个更好的解决方案,请把它贴在这里。我只是想把这个问题留在这里,以便我和其他人以后可以搜索它。

我需要告诉是否有一个有效的日期已经输入到一个文本框,这是我想出来的代码。当焦点离开文本框时,我触发此命令。

try
{
DateTime.Parse(startDateTextBox.Text);
}
catch
{
startDateTextBox.Text = DateTime.Today.ToShortDateString();
}
404567 次浏览
DateTime.TryParse

我相信这样更快,这意味着你不必使用丑陋的 try/catch:)

例如:

DateTime temp;
if(DateTime.TryParse(startDateTextBox.Text, out temp))
{
// Yay :)
}
else
{
// Aww.. :(
}

不要对流控制使用异常。使用 日期时间,尝试解析日期时间。就个人而言,我更喜欢使用特定格式的 TryParseExact,但我猜有时候 TryParse 更好。基于原始代码的示例使用:

DateTime value;
if (!DateTime.TryParse(startDateTextBox.Text, out value))
{
startDateTextox.Text = DateTime.Today.ToShortDateString();
}

选择这种方法的理由:

  • 更清晰的代码(它说明它想要做什么)
  • 比捕获和吞噬异常更好的性能
  • 这不会不恰当地捕获异常-例如 OutOfMemberyException、 ThreadInterruptedException。(可以通过捕获相关异常来修复当前代码以避免这种情况,但是使用 TryParse 仍然更好。)

使用 尝试解析怎么样?

使用 DateTime.TryParse的一个问题是,它不支持没有分隔符输入日期的非常常见的数据输入用例,例如 011508

这里有一个如何支持它的例子。(这是我正在构建的一个框架,所以它的签名有点奇怪,但核心逻辑应该是可用的) :

    private static readonly Regex ShortDate = new Regex(@"^\d{6}$");
private static readonly Regex LongDate = new Regex(@"^\d{8}$");


public object Parse(object value, out string message)
{
msg = null;
string s = value.ToString().Trim();
if (s.Trim() == "")
{
return null;
}
else
{
if (ShortDate.Match(s).Success)
{
s = s.Substring(0, 2) + "/" + s.Substring(2, 2) + "/" + s.Substring(4, 2);
}
if (LongDate.Match(s).Success)
{
s = s.Substring(0, 2) + "/" + s.Substring(2, 2) + "/" + s.Substring(4, 4);
}
DateTime d = DateTime.MinValue;
if (DateTime.TryParse(s, out d))
{
return d;
}
else
{
message = String.Format("\"{0}\" is not a valid date.", s);
return null;
}
}


}

如果字符串可以转换为 DateTime类型,则返回 true,否则返回 false。

public static bool IsDateTime(string txtDate)
{
DateTime tempDate;
return DateTime.TryParse(txtDate, out tempDate);
}
    protected bool ValidateBirthday(String date)
{
DateTime Temp;


if (DateTime.TryParse(date, out Temp) == true &&
Temp.Hour == 0 &&
Temp.Minute == 0 &&
Temp.Second == 0 &&
Temp.Millisecond == 0 &&
Temp > DateTime.MinValue)
return true;
else
return false;
}

//假设输入字符串是短日期格式。
例如: 「2013/7/5」返回 true 或
“2013/2/31”返回 false。
Http://forums.asp.net/t/1250332.aspx/1
//bool booleValue = ValidateBirthday (“12:55”) ; 返回 false

private void btnEnter_Click(object sender, EventArgs e)
{
maskedTextBox1.Mask = "00/00/0000";
maskedTextBox1.ValidatingType = typeof(System.DateTime);
//if (!IsValidDOB(maskedTextBox1.Text))
if (!ValidateBirthday(maskedTextBox1.Text))
MessageBox.Show(" Not Valid");
else
MessageBox.Show("Valid");
}
// check date format dd/mm/yyyy. but not if year < 1 or > 2013.
public static bool IsValidDOB(string dob)
{
DateTime temp;
if (DateTime.TryParse(dob, out temp))
return (true);
else
return (false);
}
// checks date format dd/mm/yyyy and year > 1900!.
protected bool ValidateBirthday(String date)
{
DateTime Temp;
if (DateTime.TryParse(date, out Temp) == true &&
Temp.Year > 1900 &&
// Temp.Hour == 0 && Temp.Minute == 0 &&
//Temp.Second == 0 && Temp.Millisecond == 0 &&
Temp > DateTime.MinValue)
return (true);
else
return (false);
}
DateTime temp;
try
{
temp = Convert.ToDateTime(grd.Rows[e.RowIndex].Cells["dateg"].Value);
grd.Rows[e.RowIndex].Cells["dateg"].Value = temp.ToString("yyyy/MM/dd");
}
catch
{
MessageBox.Show("Sorry The date not valid", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop,MessageBoxDefaultButton.Button1,MessageBoxOptions .RightAlign);
grd.Rows[e.RowIndex].Cells["dateg"].Value = null;
}
DateTime temp;
try
{
temp = Convert.ToDateTime(date);
date = temp.ToString("yyyy/MM/dd");
}
catch
{
MessageBox.Show("Sorry The date not valid", "Error", MessageBoxButtons.OK, MessageBoxIcon.Stop,MessageBoxDefaultButton.Button1,MessageBoxOptions .RightAlign);
date = null;
}

所有的答案是相当伟大的,但如果你想使用一个单一的功能,这可能工作。 它将与其他日期格式,但不与这个日期工作,例如: 05/06/202它将认为它是有效的日期,但它不是。

private bool validateTime(string dateInString)
{
DateTime temp;
if (DateTime.TryParse(dateInString, out temp))
{
return true;
}
return false;
}

您还可以为特定的 CultureInfo定义 DateTime格式

public static bool IsDateTime(string tempDate)
{
DateTime fromDateValue;
var formats = new[] { "MM/dd/yyyy", "dd/MM/yyyy h:mm:ss", "MM/dd/yyyy hh:mm tt", "yyyy'-'MM'-'dd'T'HH':'mm':'ss" };
return DateTime.TryParseExact(tempDate, formats, System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out fromDateValue);
}
protected static bool CheckDate(DateTime date)
{
if(new DateTime() == date)
return false;
else
return true;
}

一句话:

if (DateTime.TryParse(value, out _)) {//dostuff}
public static bool ValidateTime(string dateString)
{
return DateTime.TryParse(dateString, out _);
}