将DateTime.MinValue转换为DateTimeOffset

Mr *_*ose 6 datetime datetimeoffset

我试图将DateTime.MinValue转换为DateTimeOffset值,但我得到一个ArgumentOutOfRange异常.

我正在查看关于DateTime到DateTimeOffset的隐式转换的MSDN文章,而Exception部分声明我将收到此ArgumentOutOfRange异常;

...应用偏移量产生的协调世界时(UTC)日期和时间于MinValue....

那么为什么以下代码会抛出异常;

DateTime test = DateTime.MinValue;
DateTimeOffset dto = test;
Run Code Online (Sandbox Code Playgroud)

这仅仅是因为我的时区吗?我在GMT +8,但我对上述代码的理解是测试是使用Unspecified类型创建的.

我正在解决这个问题,只需测试我的DateTime的MinValue,如果是的话,那么使用DateTimeOffset.MinValue代替.

我只是好奇为什么我的未指定的类DateTime对象导致错误.

Jon*_*eet 7

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

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

因此,逻辑上,你有一个DateTimeMinValueOffset8个小时,但是这意味着,UTC日期/时间由应用抵消了早于可表示.

(不要忘了,你一个偏移到UTC以获取本地时间,或减去从当地时间它来获得UTC在野田佳彦时,我们通过使用类型为每个执行此Offset,LocalInstant并且Instant,只允许你执行适当的操作...)