我想让用户输入 DateTime 格式,但我需要验证它以检查它是否可以接受。用户可以输入“yyyy-MM-dd”,这很好,但他们也可以输入“MM/yyyyMM/ddd”或任何其他组合。有没有办法验证这一点?
7 回答
你在寻找这样的东西吗?
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, CultureInfo.InvariantCulture);
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"
作为参考,允许使用单个字符串作为格式:
d,D,f,F,g,G,m,M,o,O,r,R,s,T,u,U,y,Y
任何其他字符,例如q
,本身都是无效的。所有其他字符串都将成功解析为格式化字符串。
你不谈论你的验证策略。无论如何,您应该使用涉及正则表达式的东西,而不是应用允许的模式。这将有助于反对形式有效性..然后您必须注意实际内容并确保根据月、日和年的值是正确的。
无论如何,有几个人建议使用 DateTime.TryParse() 方法让基板照顾你。但是无论如何您都必须指定格式!所以没有魔法!否则你会模棱两可
这对我有用-
try
{
String formattedDate = DateTime.Now.ToString(dateFormat);
DateTime.Parse(formattedDate);
return true;
}
catch (Exception)
{
return false;
}
我的解决方案是将输入字段标记为只读,并允许用户仅通过jqueryui datepicker更改值。
它很直观。您可以指定您的首选格式,并且只需要验证这一种格式。
否则你可能真的遇到麻烦了。在美国,您将如何处理“ 02/03/2020 ”,您将其解释为2 月 3 日,但对于南美洲,它绝对是 3 月 2 日。全球还有很多其他的日期格式。