0

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

代码:

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

但它总是FALSE针对对象值,例如21.11.2011 0:00:00

我无法理解我做错了什么?

4

3 回答 3

1

“mm”是两位数的分钟。“MM”是两位数的月份

如果要从“07”解析七月,请使用“MM”。另一方面,如果要将“7”解析为 7 月,请使用“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");
于 2013-07-23T21:46:45.577 回答
0

你不需要MMmmMM月,mm而是分钟。

于 2013-07-23T21:43:32.763 回答
0

我会将它包装在 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;
}
于 2013-07-23T21:55:38.997 回答