【问题标题】:Storing a c# DateTimeOffset value in a SQL Server 2005 database在 SQL Server 2005 数据库中存储 c# DateTimeOffset 值
【发布时间】:2010-09-16 18:33:18
【问题描述】:

我想在 SQL Server 2005 数据库中存储一个 c# DateTimeOffset 值。

Sql 2008 将此作为内置类型,但 SQL Server 2005 没有。

DateTimeOffset 结构有一个 DateTime 值,我将它存储为 DateTime,一个 Offset 属性(TimeSpan 类型)。由于这是相对于 UTC 的时区,因此推测它通常是整数小时或半小时。

关于如何最好地将其存储在 SQL Server 2005 数据库中的建议?

【问题讨论】:

标签: c# sql-server-2005 datetimeoffset


【解决方案1】:

假设偏移量是几个小时或半小时并不是一个好主意 - 周围肯定有四分之一小时的时区。

使用毫秒作为偏移量可能是最灵活的,但我认为分钟更容易阅读。如果您要查看数据库中的“原始”数据,理解值 60 = 1 小时比 3600000 更容易。我无法想象您真的需要几分之一的分钟作为偏移量。

【讨论】:

    【解决方案2】:

    将所有 DateTimeOffset 标准化为一个公共偏移量,最好是 UTC。然后像往常一样存储 DateTime 。提取后恢复偏移量,它应该是一个常数。这不会保留原始偏移量,但无论如何偏移量对于时区来说都是模棱两可的。

    如果您确实需要知道日期/时间来源,那么您需要存储一些时区信息。这是因为一个简单的偏移量不能明确表示时间的起源。请参阅有关Choosing Between DateTime, DateTimeOffset, and TimeZoneInfo 的(有些混乱的)MSDN 文档。

    【讨论】:

    • 同意 - 将日期存储为 UTC,并且只在向用户展示时担心时区和 DST 偏移量。
    • 我不同意。 DateTimeOffset 结构(在 C# 和 SQL 2008 中)将时间存储为 UTC 或本地时间 + 偏移量。存储 UTC 时间 + 偏移量会颠倒这种关系,只会造成混乱。
    【解决方案3】:

    将日期时间存储为日期时间,将偏移量存储为毫秒 (bigint)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-04
      • 2011-08-07
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多