簡體   English   中英

我如何從datetime.now中提取年份?

[英]How i can extract year from datetime.now?

我希望用戶輸入車輛制造年份,但不能超過今年。 例如今天是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獲得一年

抱歉,我是編程新手。

要獲取任何日期(包括DateTime.Now)的年部分,請使用以下命令:

DateTime.Now.Year
else if (value != null && Convert.ToDateTime(value) > DateTime.Now.AddYears(10))
{
//validation error
}

嘗試這個:

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

您需要使用DateTime Year Year屬性。 您的else if可能看起來像:

else if (value != null && Convert.ToDateTime(value).Year < DateTime.Now.Year)

注意: Convert.ToDateTime(value).Year 。如果value沒有正確的日期, Convert.ToDateTime(value).Year會向您尖叫。

我嘗試清理一下代碼並使代碼更具邏輯性(還附上了您要查找的答案):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM