据我所知,引用单个时间点DateTimeOffset与DateTime相比更好更可靠,因为它取代了.Kind属性更方便的东西,即UTC的偏移量。
这是否解决了在日期时间中存储单个点的所有问题,还是仍有一些我应该关注的情况? (如果有可以给我一些DateTimeOffset不可靠的例子吗?)
由于
答案 0 :(得分:1)
鉴于DateTimeOffset
,对于代表什么时间点,从来没有任何混淆。所以他们总是可靠。
但在某些情况下,DateTimeOffset
单独仍然足够。以下是一个常见情况的示例:
DateTimeOffset
,其值为2013-03-10T01:00:00-05:00
。2013-03-10T03:00:00-05:00
。2013-03-10T03:00:00-04:00
。要克服这种情况,您必须也知道时间是在纽约录制的。你知道在第一步中,但是当你录制它时它就被抛弃了。在你的应用程序的其他地方,你必须坚持这个事实。您最好保留时区ID,以便重新计算正确的偏移量。
如果在您的应用程序中使用TimeZoneInfo
类,那么您需要跟踪.Id
属性的值以及DateTimeOffset
。对于纽约,时区ID为"Eastern Standard Time"
。这有点令人困惑,因为无论DST是否生效,都会使用相同的值。 (没有Id
"Eastern Daylight Time"
的Windows时区。此外,没有内置的类或结构将TimeZoneInfo
与DateTimeOffset
配对。你必须自己做。
如果您使用Noda Time(我强烈推荐)。然后,您可以利用IANA时区ID "America/New_York"
和ZonedDateTime
对象 - 这是针对这种情况设计的。
您还应该参考DateTime vs DateTimeOffset。你应该找到相似的类比。
在某些情况下,DateTimeOffset
不合适。也许这个很明显,但仍然值得一提。
这种情况比您想象的更频繁。例如:
还有其他现实世界的例子,日历上的相同点是而不是同一时间点,但人们倾向于认为它们就像它们一样。
在Noda Time中,您将使用LocalDateTime
来表示这些情况。如果没有Noda Time,您可以使用DateTime
.Kind == Unspecified
。