我试图将DateTime.MinValue转换为DateTimeOffset值,但我得到一个ArgumentOutOfRange异常 .
我正在查看the MSDN article on implicit conversions of DateTime to DateTimeOffset和Exception部分说明我将收到此ArgumentOutOfRange异常;
...应用偏移量产生的协调世界时(UTC)日期和时间早于MinValue . ...
那么为什么以下代码会抛出异常;
DateTime test = DateTime.MinValue;
DateTimeOffset dto = test;
这仅仅是因为我的时区吗?我在GMT 8中,但我对上述代码的理解是测试是使用Unspecified类型创建的 .
我正在解决这个问题,只需测试我的DateTime的MinValue,如果是的话,那么使用DateTimeOffset.MinValue代替 .
我只是好奇为什么我的未指定的类DateTime对象导致错误 .
1 回答
如果您在GMT 8中,则
DateTime.MinValue
的本地时间对应于早于DateTime.MinValue
的UTC时间,因此是例外 . 从您引用的文档:所以从逻辑上讲,
DateTime
的MinValue
为Offset
为8小时,但这意味着应用偏移所产生的UTC日期/时间早于可以表示的日期/时间 .(不要忘记您向UTC添加偏移量以获取当地时间,或者从本地时间减去它以获得UTC . 在Noda Time中,我们通过使用
Offset
,LocalInstant
和Instant
中的每一个的类型来强制执行此操作,并且仅允许你要执行适当的操作...)