你啥时候更喜欢 DateTime 而不是 DateTimeOffset
Posted
技术标签:
【中文标题】你啥时候更喜欢 DateTime 而不是 DateTimeOffset【英文标题】:When Would You Prefer DateTime Over DateTimeOffset你什么时候更喜欢 DateTime 而不是 DateTimeOffset 【发布时间】:2010-09-20 20:19:15 【问题描述】:几个月前,我被介绍到新的DateTimeOffset
类型,很高兴DateTime
在时区方面的缺陷终于得到了解决。
但是,我想知道使用这种新类型是否会产生任何开销或问题。
我在一个多语言环境的 Web 应用程序上工作。有谁知道有什么东西可以让我不把它用于我所有的日期/时间工作?这里有滥用的窗口吗?
参考:DateTimeOffset: A New DateTime Structure in .NET 3.5 by Justin Van Patten
【问题讨论】:
相关问题 - ***.com/questions/2532729/… 另见this answer 【参考方案1】:有时您真的只想表示“本地”(不知道时区)日期和时间,而不是 即时。老实说,只代表一个时间更有用 - 例如。 “无论时区如何,早上 8 点叫醒我” - 但日期和时间也可能有用。
我同意,对于绝大多数情况,DateTimeOffset
更合适。确实让我感到奇怪的是,没有一个 DateTimeTimeZone
结构同时具有即时和时区......但偏移量实际上并没有为您提供所需的所有信息。 (例如,给定DateTimeOffset
,您不知道 24 小时后的时间,因为您不知道 DST 何时开始。)
如果你想要那种结构,我有一个very crude implementation in another answer。我相信它可以很容易地改进:)
【讨论】:
您可以始终以 UTC 表示您的时间,并在需要时转换为特定时区... Omer:但我发现,您通常还想保留时区信息。是的,通常您可以只使用 UTC 时间,但对于经常性事件等,您也需要知道时区。 本地时间通常只用于未来的日期,您希望它们随着时区的变化而调整。历史数据应始终存储在一致的时区中,可能是 UTC,尽管可能有另一个历史原因。 (例如:对于 NYSE 交易数据,您可能需要全面的 EST)。 @Ben:不过,您正在考虑instants。并非一切都是这样。例如,“我的生日”是每年的 6 月 19 日——过去、现在和未来。或者“2000 年的第一天”,它在每个时区的不同时刻开始。或我闹钟的“早上 6 点”。基本上,确保你知道你真正代表的是什么类型的东西是值得的。【参考方案2】:嗯,一个明显的答案是当您需要支持没有附带 SP 的客户端时(实际上不在 3.5 中,而是在同时发布的 2.0 SP1 中)。
【讨论】:
没错,但我实际上是在我的代码和 UI 层内部谈论的。 很公平。我想我会提到它,因为当您使用 SP1 功能而据称针对 2.0 时,VS 多目标并不明显。现在至少有一个 FxCop(等)插件可以做到这一点。【参考方案3】:虽然我不喜欢在 DateTimeOffset 上使用 DateTime,但请注意,有时您需要这样做,因为 MS .Net 不支持 DateTimeOffset 作为 DataColumn.DataType 属性DataColumn.DataType Property,即使 SQL datetimeoffset 自 SQL2008 以来一直存在。
我自己在读取 (ReadXml
) 带有 XmlReadMode.InferTypedSchema
的 XML 导出数据集的 DateTimeOffset 值时遇到问题;当我尝试将其合并到 DateTimeOffset 列中时,它会将其读取为 DateTime 并崩溃
【讨论】:
以上是关于你啥时候更喜欢 DateTime 而不是 DateTimeOffset的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:strptime()参数1必须是str,而不是datetime.date Python
在 Hibernate 中持久化 Joda DateTime 而不是 Java Date