【问题标题】:DATETIME or timestamp which i should prefer?我应该更喜欢的日期时间或时间戳?
【发布时间】:2014-12-09 16:39:31
【问题描述】:

我使用的是 SQL Server 2008。服务器在印度。我想存储用户登录和注销时间。我可以在 SQL Server 中轻松做到这一点。

现在我们有来自不同国家/地区的客户/管理员将检查这些登录/注销时间。他们希望这些时间在各自的时区。

还有一种情况是我的客户从一个国家旅行到另一个国家,所以日志时间应该根据时区自动更新。

所以我的理解是我必须为客户存储时区信息和日期时间。这样我就可以使用TimeZoneInfo::ConvertTime方法来转换到不同的时区了。

我可以让我的客户在注册时选择保存他们的时区。

但我的疑问是,如果我的客户更改他的国家/地区,他们是否需要手动更改时区,或者有什么方法可以自动检测时区。检查系统时区是否可行?

或者无论如何存储时间戳可以帮助我?

【问题讨论】:

  • 使用 datetime(或 datetime2 取决于精度)以 UTC 存储数据。将 UTC 转换为 进行显示比将 转换为 进行显示要容易得多。 DateTimeOffset 有一些但不是全部;例如,它不理解 DST。时间戳数据类型只是一个糟糕的命名选择,has absolutely nothing to do with date or time.
  • 我在 MSSQLTips.com 上有一个由三部分组成的系列 - 在我的 author profile 下查看“日期”类别下的三个帖子。
  • @AaronBertrand:获取客户时区的最佳方式是什么?
  • 如果他们登录到您的系统,您只需请求一次,就可以了。如果你想依赖浏览器,你可以从客户端获取它(JavaScript 可以帮助转换到/从 UTC 转换,而不是让 SQL Server 背负它)。

标签: sql-server date datetime timezone timestamp


【解决方案1】:

使用datetimeoffset。我公司的业务遍及欧洲、一些亚洲国家和北美。对您的应用程序进行编码,使其将当前计算机的时区设置传递给数据库。当用户旅行时,Windows 可以在检测到用户的地理位置时更新时区信息。我从来不用那样担心夏令时(想象一下在两大洲处理夏令时的乐趣)。

由于存储了时区信息,我可以将其转换为我想要的任何时区。或者读取数据的应用程序可以使用本地计算机时区来执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 1970-01-01
    相关资源
    最近更新 更多