【问题标题】: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

【问题讨论】:

标签: .net datetime datetimeoffset


【解决方案1】:

虽然我不喜欢在 DateTimeOffset 上使用 DateTime,但请注意,有时您需要这样做,因为 MS .Net 不支持 DateTimeOffset 作为 DataColumn.DataType 属性DataColumn.DataType Property,即使 SQL datetimeoffset 自 SQL2008 以来一直存在。

我自己在读取 (ReadXml) 带有 XmlReadMode.InferTypedSchema 的 XML 导出数据集的 DateTimeOffset 值时遇到了问题;当我尝试将其合并到 DateTimeOffset 列中时,它会将其读取为 DateTime 并崩溃

【讨论】:

    【解决方案2】:

    嗯,一个明显的答案是当您需要支持没有附带 SP 的客户端时(实际上不在 3.5 中,而是在同时发布的 2.0 SP1 中)。

    【讨论】:

    • 没错,但我实际上是在我的代码和 UI 层内部谈论的。
    • 很公平。我想我会提到它,因为当您使用 SP1 功能而据称针对 2.0 时,VS 多目标并不明显。现在至少有一个 FxCop(等)插件可以做到这一点。
    【解决方案3】:

    有时您真的只想表示“本地”(不知道时区)日期和时间,而不是 即时。老实说,只代表一个时间更有用 - 例如。 “无论时区如何,早上 8 点叫醒我” - 但日期和时间也可能有用。

    我同意,对于绝大多数情况,DateTimeOffset 更合适。确实让我感到奇怪的是,没有一个 DateTimeTimeZone 结构同时具有即时和时区......但偏移量实际上并没有为您提供所需的所有信息。 (例如,给定DateTimeOffset,您不知道 24 小时后的时间,因为您不知道 DST 何时开始。)

    如果你想要那种结构,我有一个very crude implementation in another answer。我相信它可以很容易地改进:)

    【讨论】:

    • 您始终可以用 UTC 表示您的时间,并在需要时转换为特定时区...
    • Omer:但我发现,您通常还想保留时区信息。是的,通常您可以只使用 UTC 时间,但对于经常性事件等,您也需要知道时区。
    • 本地时间通常只用于未来的日期,您希望它们随着时区的变化而调整。历史数据应始终存储在一致的时区中,可能是 UTC,尽管可能有另一个历史原因。 (例如:对于 NYSE 交易数据,您可能需要全面的 EST)。
    • @Ben:不过,您正在考虑instants。并非一切都是这样。例如,“我的生日”是每年的 6 月 19 日——过去、现在和未来。或者“2000 年的第一天”,它在每个时区的不同时刻开始。或我闹钟的“早上 6 点”。基本上,确保你知道你真正代表的是什么类型的东西是值得的。
    猜你喜欢
    • 2010-09-20
    • 2010-09-24
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    相关资源
    最近更新 更多