首页 文章

将DateTime.MinValue转换为DateTimeOffset

提问于
浏览
6

我试图将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 回答

  • 6

    如果您在GMT 8中,则 DateTime.MinValue 的本地时间对应于早于 DateTime.MinValue 的UTC时间,因此是例外 . 从您引用的文档:

    如果DateTime.Kind属性的值为DateTimeKind.Local或DateTimeKind.Unspecified,则将DateTimeOffset对象的日期和时间设置为等于dateTime,并将其Offset属性设置为等于本地系统的当前时区的偏移量 .

    所以从逻辑上讲, DateTimeMinValueOffset 为8小时,但这意味着应用偏移所产生的UTC日期/时间早于可以表示的日期/时间 .

    (不要忘记您向UTC添加偏移量以获取当地时间,或者从本地时间减去它以获得UTC . 在Noda Time中,我们通过使用 OffsetLocalInstantInstant 中的每一个的类型来强制执行此操作,并且仅允许你要执行适当的操作...)

相关问题