在C#中validationdate时间

我怀疑我是唯一一个提出这个解决scheme的人,但如果你有更好的解决scheme,请在这里发布。 我只是想在这里留下这个问题,所以我和其他人可以稍后search。

我需要告诉一个有效的date是否已经input到一个文本框中,这是我提出的代码。 当焦点离开文本框时我开始播放。

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

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

例如

 DateTime temp; if(DateTime.TryParse(startDateTextBox.Text, out temp)) //yay else // :( 

不要使用exception进行stream量控制。 使用DateTime.TryParse和DateTime.TryParseExact 。 就个人而言,我更喜欢TryParseExact与特定的格式,但我想有些时候TryParse更好。 基于您的原始代码的示例使用:

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

喜欢这种方法的原因是:

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

这是解决scheme的另一个变体,如果string可以转换为DateTimetypes,则返回true,否则返回false。

 public static bool IsDateTime(string txtDate) { DateTime tempDate; return DateTime.TryParse(txtDate, out tempDate); } 

我会使用DateTime.TryParse()方法: http : //msdn.microsoft.com/en-us/library/system.datetime.tryparse.aspx

怎么样使用TryParse ?

使用DateTime.TryParse的问题是,它不支持非分隔符inputdate的非常常见的数据input用例,例如011508

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

  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; } } } 
  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; } 

//假设inputstring是短date格式。
例如“2013/7/5”返回true或
“2013/2/31”返​​回false。
http://forums.asp.net/t/1250332.aspx/1
//布尔booleanValue = 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; }