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

Mat*_*att 112 c# validation datetime

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

我需要判断是否在文本框中输入了有效日期,这是我提出的代码.当焦点离开文本框时我会触发它.

try
{
    DateTime.Parse(startDateTextBox.Text);
}
catch
{
    startDateTextBox.Text = DateTime.Today.ToShortDateString();
}
Run Code Online (Sandbox Code Playgroud)

qui*_*qui 255

DateTime.TryParse
Run Code Online (Sandbox Code Playgroud)

我相信这更快,这意味着你不必使用丑陋的尝试/捕获:)

例如

DateTime temp;
if(DateTime.TryParse(startDateTextBox.Text, out temp))
{
  // Yay :)
}
else
{
  // Aww.. :(
}
Run Code Online (Sandbox Code Playgroud)

  • 可以使用 if(DateTime.TryParse(startDateTextBox.Text, out var temp))` 来缩短变量初始化:) (3认同)
  • 如果我错了,请纠正我,但在C#(而不是JavaScript)中if/else分支是否需要花括号?不要误解我的意思,我不是要仔细检查,这是一个很棒的答案,而且我正在帮助我,因为它帮助了我,但只是想到,因为你在查看已发布的答案时从未知道未来的新用户是多少可能会混淆他们.当然,如果你在C#中使用花括号有问题,这个问题将是你最不担心的问题...... (2认同)
  • @VoidKing你对花括号是正确的,但如果你在该块中只有1个语句,则不必使用它们.这也适用于其他一些语言,但我可以看到这可能会误导新的编码员. (2认同)
  • @ D.Galvez请原谅我迟到的派对,但即使只有一个陈述,包括括号是最佳做法吗?这可能只是个人偏好最重要的情况 - 在这种情况下,我发现*包括*它们只是为了可读性和一致性而非常好. (2认同)
  • 6年前,我几乎不知道会发生关于括号的这种辩论. (2认同)

Jon*_*eet 59

不要使用异常进行流量控制.使用DateTime.TryParseDateTime.TryParseExact.我个人更喜欢具有特定格式的TryParseExact,但我猜有时TryParse更好.基于原始代码的示例使用:

DateTime value;
if (!DateTime.TryParse(startDateTextBox.Text, out value))
{
    startDateTextox.Text = DateTime.Today.ToShortDateString();
}
Run Code Online (Sandbox Code Playgroud)

更喜欢这种方法的原因:

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


小智 22

这是解决方案的另一种变体,如果字符串可以转换为DateTime类型,则返回true,否则返回false.

public static bool IsDateTime(string txtDate)
{
    DateTime tempDate;
    return DateTime.TryParse(txtDate, out tempDate);
}
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到StackOverflow!请查看已经提供的答案,特别是在回答三年以上且已成功回答的问题时.您的答案已经被之前的受访者所涵盖. (3认同)

S. *_*ees 7

所有答案都非常好,但如果您想使用单个功能,这可能会起作用。它将适用于其他日期格式,但不适用于此日期,例如:05/06/202 它会将其视为有效日期,但事实并非如此。

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

  • 返回 DateTime.TryParse() 的结果而不是“if”块怎么样?此外,您的 IDE 会抱怨从未使用过 temp,您可以在函数调用中直接将其声明为“out DateTime temp”。 (2认同)