如何验证DateTime格式?

时间:2012-07-27 21:45:14

标签: c# validation datetime

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

7 个答案:

答案 0 :(得分:23)

你在找这样的东西吗?

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.");
}

答案 1 :(得分:9)

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

答案 2 :(得分:5)

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

为此你可以往返它:

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

答案 3 :(得分:3)

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

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

Standard (1 character)
Custom (>1 character)

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

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

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

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

直观。您可以指定首选格式,只需验证这种格式。

答案 6 :(得分:0)

这对我有用 -

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