概括
您将一个空的DateTime
(例如new DateTime()
)传递给强大的方法之一PersianCalendar
。
请注意,它DateTime
是 a struct
(不是 a class
),并且任何未初始化/设置的类型的属性或变量DateTime
都将具有此最小值。
也许您正在反序列化一个没有此值但类的属性不可为空的 json。也许数据库中的列为空,但模型的属性不可为空等。
细节
CheckTicksRange
该异常是由类中许多方法调用的PersianCalendar 的方法引发的:
internal static void CheckTicksRange(long ticks)
{
if (ticks < s_minDate.Ticks || ticks > s_maxDate.Ticks)
{
throw new ArgumentOutOfRangeException(
"time",
ticks,
SR.Format(SR.ArgumentOutOfRange_CalendarRange, s_minDate, s_maxDate));
}
}
您收到的错误消息以 string: 结尾Actual value was 0.
。这意味着传入的DateTime
有 0 个刻度,这意味着它是空的。
例如:
try
{
new PersianCalendar().GetYear(time: new DateTime());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
这导致:
Specified time is not supported in this calendar. It should be between 22/03/0622 00:00:00 (Gregorian date) and 31/12/9999 23:59:59 (Gregorian date), inclusive. (Parameter 'time')
Actual value was 0.
请注意“实际值为 0。”。
另请注意,在我的语言环境中,例外情况更清楚一些,因为日期包含 4 位数的年份。
如果我们使用无效的日期,但不是空的,则异常消息的结尾会有所不同:
new PersianCalendar().GetYear(time: new DateTime(year: 622, month: 1, day: 1));
结果是:
Specified time is not ...
... 'time')
Actual value was 195968160000000000.