我创建了一个将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)
请告诉我如何在我的代码中处理此错误。
答案 0 :(得分:2)
我的猜测是你在properties.StartDate变量中有一个统一的日期时间。 单位化日期时间值为1/1/0001 12:00:00。
您可以在ConvertTimeZone函数上添加此检查以捕获此类问题或/并尝试修复业务逻辑流程。
if (dateTime == default(DateTime))
throw new ArgumentOutOfRangeException("Please set the initial datetime value");