如何处理错误System.ArgumentOutOfRangeException:添加或减去的值导致无法表示的DateTime

时间:2015-10-05 06:36:15

标签: c# datetime

我创建了一个将UTC日期时间转换为特定时区日期时间的辅助方法。

 public DateTime ConvertToSpecificTimeZone(DateTime utcDateTime, string utcOffset)
 {
      return ConvertTimeZone(utcDateTime, utcOffset.Trim());
 }
 private DateTime ConvertTimeZone(DateTime dateTime, string timeOffset)
 {
            int offsetSign = (timeOffset.StartsWith("-") ? -1 : 1);
            timeOffset = timeOffset.TrimStart('+').TrimStart('-');
            if (timeOffset == "00:00")
            {
                return dateTime;
            }
            else
            {
                string[] offsetArgs = timeOffset.Split(':');
                return dateTime.AddHours(Int32.Parse(offsetArgs[0]) * offsetSign).AddMinutes(Int32.Parse(offsetArgs[1]) * offsetSign);
            }
}

从MVC项目中的ItemController调用它时

StartDate = new Helper().ConvertToSpecificTimeZone(properties.StartDate, this.UTCTimeOffset).ToString("MM/dd/yyyy");

并且它有时会给出错误,如

  

System.ArgumentOutOfRangeException:添加或减去的值   导致无法表示的DateTime。参数名称:值at   System.DateTime.AddTicks(Int64值)at   Myproject.Utility.Helper.ConvertTimeZone(DateTime dateTime,String   timeOffset)在Myproject.Controllers.ItemController.Manage(String   PARAM)

请告诉我如何在我的代码中处理此错误。

1 个答案:

答案 0 :(得分:2)

我的猜测是你在properties.StartDate变量中有一个统一的日期时间。 单位化日期时间值为1/1/0001 12:00:00。

您可以在ConvertTimeZone函数上添加此检查以捕获此类问题或/并尝试修复业务逻辑流程。

        if (dateTime == default(DateTime))
            throw new ArgumentOutOfRangeException("Please set the initial datetime value");