When Would You Prefer DateTime Over DateTimeOffset
几个月前,我被引入新的DateTimeOffset类型,很高兴DateTime关于时区的缺陷终于得到了解决。
但是,我想知道使用这种新类型是否有任何开销或问题。
我在一个多语言环境的Web应用程序上工作。 有没有人知道任何可以影响我的东西,只是在我的所有日期/时间工作中使用它? 这里有滥用的窗口吗?
参考:DateTimeOffset:Justin Van Patten在.NET 3.5中的一个新的DateTime结构
-
相关问题 - stackoverflow.com/questions/2532729/…
-
另见这个答案
有时你真的只想表示一个"本地"(时区不知道)的日期和时间而不是瞬间。说实话,只表示一个时间更有用 - 例如"不管时区如何,都会在上午8点叫醒我" - 但日期和时间也很有用。
我同意,对于绝大多数情况,DateTimeOffset更合适。它确实让我感到奇怪,因为没有一个DateTimeTimeZone结构同时具有瞬间和它的时区......但是偏移实际上并没有为您提供所需的所有信息。 (例如,给定DateTimeOffset,您不知道24小时后的时间是什么,因为您不知道DST何时可能会启动。)
如果你想要那种结构,我在另一个答案中有一个非常粗略的实现。我相信它可以很容易地改进:)
-
您始终可以用UTC表示您的时间,并在需要时转换为特定的时区...
-
Omer:但我发现,你经常想保留时区信息。是的,通常你可以只使用UTC时间,但对于周期性事件等,你也需要知道时区。
-
本地时间通常只应用于将来日期,您希望它们根据时区变化进行调整。历史数据应始终存储在一致的时区,可能是UTC,尽管可能存在另一个时间的历史原因。 (例如:对于纽约证券交易所交易数据,您可能需要全面的EST)。
-
@Ben:你在考虑时间问题。并非一切都是那样的。例如,"我的生日"是每年的6月19日 - 过去,现在和未来。或者"2000年的第一天",在每个时区的不同时刻开始。或者我闹钟的"早上6点"。基本上值得确保你知道你真正代表什么样的东西。
好吧,一个明显的答案就是当你需要支持没有它的SP的客户端时(它实际上不是3.5 - 它是2.0 SP1,同时发货)。
-
没错,但我实际上是在我的代码和UI层内部讨论。
-
很公平。我以为我会提到它,因为当你使用SP1功能时,VS多目标并没有显而易见,而据称是针对2.0。现在至少有一个FxCop(等)加载项来做到这一点。
虽然我不希望在DateTimeOffset上使用DateTime,但请注意,有时您需要,因为MS .Net不支持DateTimeOffset作为DataColumn.DataType属性DataColumn.DataType属性,即使SQL datetimeoffset自SQL2008以来一直存在。
我自己在使用XmlReadMode.InferTypedSchema读取(ReadXml)XML导出的DataSet的DateTimeOffset值时遇到了问题。它将它读作DateTime并在我尝试将其合并到DateTimeOffset列时崩溃