首页 > 解决方案 > 如何在 C# 中为将来的日期修复 ArgumentOutOfRangeException

问题描述

我有一个如下所示的用于日期时间处理的 C# 代码,并且想知道如何修复它。

//Value of effective date 
api_reqBody["effectiveDate"] = DateTime.Today.AddDays(2).ToString(Helper.DATE_FORMAT_API);

//Value of Maturity date 
var effDate = Convert.ToDateTime(api_reqBody["effectiveDate"]);
api_reqBody["updatedLoanAccount"]["maturityDate"] =
            new DateTime(effDate.Year + uServiceSupport.H300IORIL_MAXTERM_YEARS, effDate.Month, effDate.Day + 1).ToString(Helper.DATE_FORMAT_API);      
// Value of H300IORIL_MAXTERM_YEARS is 5 .

我得到了一个 ArgumentOutOfRangeException 用于上述代码的日期时间处理 - 当它今天在 29/05 运行时。请参阅下面的消息 在此处输入图像描述

如果我将生效日期更改为 AddDays(3) ,它会再次开始工作。但我想更可靠地修复它
api_reqBody["effectiveDate"] = DateTime.Today.AddDays(3).ToString(Helper.DATE_FORMAT_API);

标签: c#.net

解决方案


将时间段添加到DateTime对象的正确方法是使用这些Add方法。因此,在您的情况下,您将AddYears首先使用,然后AddDays

api_reqBody["updatedLoanAccount"]["maturityDate"] =
  new DateTime(effDate.Year, effDate.Month, effDate.Day)
  .AddYears(uServiceSupport.H300IORIL_MAXTERM_YEARS)
  .AddDays(1)
  .ToString(Helper.DATE_FORMAT_API);

这使您远离诸如每月天数、闰年等烦扰。


推荐阅读