我希望用户输入制造年份但不超过今年。例如今天是2015年,我不希望他们输入2020.但2016年还可以。 这是我的代码。
property = validationContext.ObjectType.GetProperty("VehicleYear");
string vehicleYear = Convert.ToString(property.GetValue(validationContext.ObjectInstance, null));
if (!string.IsNullOrWhiteSpace(vehicleYear) && vehicleYear.Length == 4 && Convert.ToInt16(vehicleYear) >= 1980)
{
isVehicleOlderThan1981 = true;
}
else
{
isVehicleOlderThan1981 = false;
else if (value != null && Convert.ToDateTime(value) < DateTime.Now)
{
return new ValidationResult(this.ErrorMessage);
}
我只想从DatetTime.now获得一年
抱歉,我是编程新手。
答案 0 :(得分:1)
要获取任何日期的年份组件(包括DateTime.Now),请使用:
DateTime.Now.Year
答案 1 :(得分:0)
else if (value != null && Convert.ToDateTime(value) > DateTime.Now.AddYears(10))
{
//validation error
}
答案 2 :(得分:0)
试试这个:
DateTime.Now.Year
您可能还想查看TryParse方法,它会简化您的代码。 即
int i;
if(int.TryParse("VehicleYear", out i)
{
//successful conversion, use int i for your comparisons etc.
}
else
{
//wasn't a valid year (can't be converted)
}
答案 3 :(得分:0)
您需要使用Year
中的年份DateTime
属性。您的else if
可能如下所示:
else if (value != null && Convert.ToDateTime(value).Year < DateTime.Now.Year)
注意:如果Convert.ToDateTime(value).Year
没有正确的日期,value
会尖叫。
答案 4 :(得分:0)
我尝试清理你的代码并使其更符合逻辑(同时附上你正在寻找的答案):
property = validationContext.ObjectType.GetProperty("VehicleYear");
var value = property.GetValue(validationContext.ObjectInstance, null);
int inputNumber;
//First check if input is number
if (!int.TryParse(value, out inputNumber))
{
this.ErrorMessage = "Input is not an integer!"
//you could also throw an exception here (depends on your error handling)
return new ValidationResult(this.ErrorMessage);
}
//retrieves the number of digits
int countDigits = Math.Floor(Math.Log10(year) + 1);
if (countDigits != 4)
{
this.ErrorMessage = String.Format("Input has {0} digits!",countDigits);
return new ValidationResult(this.ErrorMessage);
}
if (inputNumber > (DateTime.Now.Year + 1))
{
this.ErrorMessage = "Year is in the future!";
return new ValidationResult(this.ErrorMessage);
}
//inputNumber is now a valid year!
if(inputNumber > 1980)
{
isVehicleOlderThan1981 = true;
} else {
isVehicleOlderThan1981 = false;
}