如何validationDateTime格式?

我想让用户输入DateTime格式,但我需要validation它以检查它是否可以接受。 用户可以输入“yyyy-MM-dd”并且没问题,但是他们也可以输入“MM / yyyyMM / ddd”或任何其他组合。 有没有办法validation这个?

我不知道有什么方法可以实际validation他们输入的格式,因为有时候你想要故意包含翻译成任何东西的字符。 您可以考虑的一件事是允许用户通过显示其输入格式转换为的预览来进行自我validation。

你在找这样的东西吗?

 DateTime expectedDate; if (!DateTime.TryParse("07/27/2012", out expectedDate)) { Console.Write("Luke I am not your datetime.... NOOO!!!!!!!!!!!!!!"); } 

如果您的用户知道所需的确切格式……

 string[] formats = { "MM/dd/yyyy", "M/d/yyyy", "M/dd/yyyy", "MM/d/yyyy" }; DateTime expectedDate; if (!DateTime.TryParseExact("07/27/2012", formats, new CultureInfo("en-US"), DateTimeStyles.None, out expectedDate)) { Console.Write("Thank you Mario, but the DateTime is in another format."); } 

我假设您想知道指定的格式字符串是否有效…

为此你可以往返它:

  private bool IsValidDateFormat(string dateFormat) { try { String dts=DateTime.Now.ToString(dateFormat); DateTime.ParseExact(dts, dateFormat, CultureInfo.InvariantCulture); return true; } catch (Exception) { return false; } } 

除非我记错了,否则唯一无效的DateTime格式字符串是一个字符长。 您可以假设任何2个或更多字符的DateTime格式字符串有效。

 DateTime.ParseExact("qq", "qq", null) == DateTime.Today DateTime.ParseExact("myy", "501", null) == "05/01/2001" 

标准(1个字符)
自定义(> 1个字符)

作为参考,允许单个字符串作为格式:

 d,D,f,F,g,G,m,M,o,O,r,R,s,T,u,U,y,Y 

任何其他字符(例如q )本身都是无效的。 所有其他字符串将成功解析为格式字符串。

您不会谈论您的validation策略。 无论如何你应该使用涉及正则表达式的东西,而不是应用允许的模式 这将有助于抵制正式的有效性。那么你必须关注实际内容,并确保数值按月,日和年正确。

无论如何,有几个人建议使用DateTime.TryParse()方法让底物照顾你。 但无论如何你必须指定格式! 所以没有魔力! 否则你会陷入歧义

我的解决方案是将输入字段标记为只读,并允许用户仅通过jqueryui datepicker更改值。

这很直观。 您可以指定首选格式,只需validation这种格式即可。

这对我有用 –

 try { String formattedDate = DateTime.Now.ToString(dateFormat); DateTime.Parse(formattedDate); return true; } catch (Exception) { return false; }