我在ASP.NET MVC3控制器中有以下代码:
public PartialViewResult GetCalendar(int? month,int? year) { var test = new DateTime((year.HasValue ? year.Value : 1),(month.HasValue ? month.Value : 1),1); return PartialView("Calendar",new DateTimeOffset(test)); }
我的视图模型是DateTimeOffset?
抛出异常的原因是什么?
解决方法
DateTimeOffset构造函数首先将不是Kind’UTC’的任何DateTime转换为等效的UTC时间.然后它将检查UTC等效的DateTime是否超出DateTimeOffset.MinValue和DateTimeOffset.MaxValue的边界,如果是,则抛出类似于您遇到的ArgumentOutOfRangeException.
检查您正在使用的变量测试的DateTime.Kind,如果它不是’UTC’,那么如果转换为UTC将使测试指定的DateTime超出这些边界,则可以计算出来 – 根据MSDN文档,MinValue和MaxValue(UTC)分别是’1/1/0001 12:00:00 AM 00:00’和’12 / 31/9999 11:59:59 PM 00:00′.
文档(DateTimeOffset.MinValue)注意到:
“在方法与MinValue进行比较之前,任何DateTimeOffset值都会转换为协调世界时(UTC).这意味着DateTimeOffset值的日期和时间接近最小范围,但其偏移量为正,可能会引发异常.例如,值1/1/0001 1:00:00 AM 02:00超出范围,因为它比MinValue提前一小时转换为UTC.“
“在将方法与MaxValue进行比较之前,任何DateTimeOffset值都会转换为协调世界时(UTC).这意味着DateTimeOffset值的日期和时间接近最大范围,但其偏移量为负,值12/31/9999 11:00 PM -02:00超出范围,因为它比MaxValue晚一个小时转换为UTC.“
根据文档(DateTimeOffset Constructor),应用于非UTC种类的偏移量是“本地系统当前时区的偏移量”.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。