将 DateTime.MinValue 转换为 DateTimeOffset
我正在尝试将 DateTime.MinValue 转换为 DateTimeOffset 值,但收到 ArgumentOutOfRange 异常。
我正在查看 MSDN关于 DateTime 到 DateTimeOffset 的隐式转换的文章 和异常部分指出,我将在以下情况下收到此 ArgumentOutOfRange 异常:
... 应用偏移后产生的协调世界时 (UTC) 日期和时间早于 MinValue。 ...
那么为什么下面的代码会抛出异常;
DateTime test = DateTime.MinValue;
DateTimeOffset dto = test;
这仅仅是因为我的时区吗?我现在是 GMT +8,但我对上面代码的理解是测试是用 Unspecified 类型创建的。
我正在通过简单地测试 DateTime 的 MinValue 来解决这个问题,如果是这样,则使用 DateTimeOffset.MinValue 代替。
我只是好奇为什么我未指定的 DateTime 对象会导致错误。
I am trying to convert DateTime.MinValue to a DateTimeOffset value but am getting an ArgumentOutOfRange exception.
I was looking at the the MSDN article on implicit conversions of DateTime to DateTimeOffset and the Exception section states that I'll receive this ArgumentOutOfRange exception when;
...
The Coordinated Universal Time (UTC) date and time that results from applying the offset is earlier than MinValue.
...
Why then does the following code throw the exception;
DateTime test = DateTime.MinValue;
DateTimeOffset dto = test;
Is it simply due to my timezone? I am in GMT +8, but my understanding of the above code is that test is created with an Unspecified kind.
I am working around the issue by simply testing for MinValue of my DateTime, and if so, then using DateTimeOffset.MinValue instead.
I am merely curious as to why my unspecified kind DateTime object causes the error.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您采用 GMT+8,则本地时间
DateTime.MinValue
对应于早于DateTime 的 UTC 时间。 MinValue
,因此出现异常。从您引用的文档中:因此,从逻辑上讲,您的
DateTime
为MinValue
,Offset
为 8 小时,但这意味着 UTC应用偏移量产生的日期/时间早于可以表示的日期/时间。(不要忘记,您添加 UTC 偏移量来获取当地时间,或者减去 本地时间来获取 UTC。在 Noda Time 我们通过使用每个
Offset
、LocalInstant
的类型来强制执行此操作和即时
,并且仅允许您执行适当的操作...)If you're in GMT+8, then a local time of
DateTime.MinValue
corresponds to a UTC time earlier thanDateTime.MinValue
, hence the exception. From the documentation you referenced:So logically you would have a
DateTime
ofMinValue
with anOffset
of 8 hours, but that means that the UTC date/time resulting from applying the offset is earlier than can be represented.(Don't forget that you add an offset to UTC to get a local time, or subtract it from a local time to get UTC. In Noda Time we enforce this by using a types for each of
Offset
,LocalInstant
andInstant
, and only allow you to perform the appropriate operation...)