我正在尝试将DateTime.MinValue转换为DateTimeOffset值,但我收到了ArgumentOutOfRange异常。
我正在查看the MSDN article on implicit conversions of DateTime to DateTimeOffset,并且“异常”部分指出我将收到此ArgumentOutOfRange异常;
... 应用偏移量产生的协调世界时(UTC)日期和时间
早于而不是MinValue。 ...
为什么以下代码会抛出异常;
DateTime test = DateTime.MinValue;
DateTimeOffset dto = test;
这仅仅是因为我的时区吗?我在GMT +8,但我对上述代码的理解是测试是使用Unspecified类型创建的。
我正在通过简单地测试我的DateTime的MinValue来解决这个问题,如果是,那么使用DateTimeOffset.MinValue代替。
我只是好奇为什么我的未指定的种类DateTime对象导致错误。
答案 0 :(得分:6)
如果您使用的是GMT + 8,那么DateTime.MinValue
的本地时间对应于早于DateTime.MinValue
的 UTC 时间,因此例外。从您引用的文档:
如果DateTime.Kind属性的值为DateTimeKind.Local或DateTimeKind.Unspecified,则将DateTimeOffset对象的日期和时间设置为等于dateTime,并将其Offset属性设置为等于本地系统当前的偏移量时区。
逻辑上, 的DateTime
MinValue
Offset
为8小时,但这意味着申请时的UTC日期/时间偏移量早于可以表示的值。
(不要忘记你向UTC添加偏移量以获得本地时间,或者从当地时间减去以获得UTC。{{3我们通过为每个Offset
,LocalInstant
和Instant
使用类型来强制执行此操作,并且只允许您执行相应的操作...)