【发布时间】: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