将DateTime.MinValue转换为DateTimeOffset

将DateTime.MinValue转换为DateTimeOffset,datetime,datetimeoffset,Datetime,Datetimeoffset,我正在尝试将DateTime.MinValue转换为DateTimeOffset值,但遇到ArgumentOutOfRange异常 我正在查看,异常部分声明我将在以下时间收到ArgumentOutOfRange异常: 。。。 应用偏移量产生的协调世界时(UTC)日期和时间早于最小值。 那么为什么下面的代码抛出异常 DateTime test = DateTime.MinValue; DateTimeOffset dto = test; 这仅仅是因为我的时区吗?我在GMT+8中,但我对上述代码

我正在尝试将DateTime.MinValue转换为DateTimeOffset值,但遇到ArgumentOutOfRange异常

我正在查看,异常部分声明我将在以下时间收到ArgumentOutOfRange异常:

。。。 应用偏移量产生的协调世界时(UTC)日期和时间早于最小值。

那么为什么下面的代码抛出异常

DateTime test = DateTime.MinValue;
DateTimeOffset dto = test;
这仅仅是因为我的时区吗?我在GMT+8中,但我对上述代码的理解是,测试是使用未指定的类型创建的

我只是通过测试DateTime的MinValue来解决这个问题,如果是,那么就改用DateTimeOffset.MinValue


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

如果您在GMT+8,那么本地时间
DateTime.MinValue
对应的UTC时间早于
DateTime.MinValue
,因此出现异常。从您引用的文档中:

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

因此,从逻辑上讲,您的
DateTime
MinValue
,而
偏移量
为8小时,但这意味着应用偏移量产生的UTC日期/时间早于可以表示的时间


(不要忘记向UTC添加偏移量以获得本地时间,或者从本地时间中减去偏移量以获得UTC。在中,我们通过为
偏移量
本地安装量
即时
中的每一个使用类型来实现这一点,并且只允许您执行适当的操作…

感谢Jon。我不敢相信我错过了文档的这一部分。这也解释了我的windows phone应用程序中一个让我烦恼了一段时间的错误:)