DateTimeOffset 默认值
DateTimeOffset default value
我想将默认值设置为 DateTimeOffset - 它不应该是 DateTime.Now 而是 DateTime.MinValue 或 default(DateTime)
有什么想法我该怎么做?此代码:
DateTimeOffset d = new DateTimeOffset(DateTime.MinValue)
抛出异常
此代码为您抛出异常的原因是您可能处于 UTC 之前的时区 - 所以当 DateTime.MinValue
(Kind
为 Unspecified
) 转换为 UTC,它变得无效。文档中指定了转换:
If the value of DateTime.Kind
is DateTimeKind.Local
or DateTimeKind.Unspecified
, the DateTime
property of the new instance is set equal to dateTime
, and the Offset
property is set equal to the offset of the local system's current time zone.
尽管您可以明确指定偏移量:
DateTimeOffset d = new DateTimeOffset(DateTime.MinValue, TimeSpan.Zero);
这不会导致任何转换...但我相信它完全等同于 default(DateTimeOffset)
。 (请注意,它更明确 - 通常是一件好事。)
您可能还想考虑使用 DateTimeOffset?
并在缺少 "real" 值时指定 null
,而不是仅使用虚拟值。
我想将默认值设置为 DateTimeOffset - 它不应该是 DateTime.Now 而是 DateTime.MinValue 或 default(DateTime)
有什么想法我该怎么做?此代码:
DateTimeOffset d = new DateTimeOffset(DateTime.MinValue)
抛出异常
此代码为您抛出异常的原因是您可能处于 UTC 之前的时区 - 所以当 DateTime.MinValue
(Kind
为 Unspecified
) 转换为 UTC,它变得无效。文档中指定了转换:
If the value of
DateTime.Kind
isDateTimeKind.Local
orDateTimeKind.Unspecified
, theDateTime
property of the new instance is set equal todateTime
, and theOffset
property is set equal to the offset of the local system's current time zone.
尽管您可以明确指定偏移量:
DateTimeOffset d = new DateTimeOffset(DateTime.MinValue, TimeSpan.Zero);
这不会导致任何转换...但我相信它完全等同于 default(DateTimeOffset)
。 (请注意,它更明确 - 通常是一件好事。)
您可能还想考虑使用 DateTimeOffset?
并在缺少 "real" 值时指定 null
,而不是仅使用虚拟值。