在ASP.NET MVC应用程序中验证日期

本文关键字:验证 日期 应用程序 MVC ASP NET | 更新日期: 2023-09-27 18:24:40

我想在服务器端检查我的日期输入值。

代码:

public class DateAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        DateTime date;
        string str = value.ToString();
        if (!DateTime.TryParseExact(str, "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
            return false;
        return true;
    }
}

但对于像21.11.2011 0:00:00 这样的对象值,它总是FALSE

我不明白我做错了什么?

在ASP.NET MVC应用程序中验证日期

"mm"是一个2位数的分钟。"MM"是一个2位数的月份

如果您希望July从"07"解析,请使用"MM"。另一方面,如果要将"7"解析为July,请使用"M"。这是一个巨大的格式列表。

编辑:使用DateTime.TryParseExact以格式字符串进行解析:

string dateString = "21.12.1985 3:12:15";
DateTime date;
if (DateTime.TryParseExact(dateString,"d.M.yyyy h:mm:ss",null,DateTimeStyles.None, out date))
    Console.WriteLine(date);
    else
        Console.WriteLine("Invalid date");

您需要MM而不是mmMM是月,而mm是分钟。

我会把它包装在一个try-catch语句中,并尝试在它上使用Parse方法。由于当前代码实际上并没有返回特定格式的字符串,无论它是否有效,我都会执行以下操作。DateTime距离特定日期/时间只有很长的一段时间,所以格式无关紧要。从…起http://msdn.microsoft.com/en-us/library/1k1skd40.aspx我们可以看到,它只会抛出两个异常,所以只需考虑这两个异常就可以相应地添加代码。

public override bool IsValid(object value)
{
    if (value != null)
    {
        try
        {
            DateTime date = DateTime.Parse(value.ToString());
            return true;
        }
        catch (ArgumentNullException)
        {
            // value is null so not a valid string
        }
        catch (FormatException)
        {
            //not a valid string
        }
    }
    return false;
}