将DateTime.MinValue转换为DateTimeOffset

时间:2011-08-03 09:19:35

标签: datetime datetimeoffset

我正在尝试将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对象导致错误。

1 个答案:

答案 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我们通过为每个OffsetLocalInstantInstant使用类型来强制执行此操作,并且只允许您执行相应的操作...)