【发布时间】:2012-12-24 19:08:40
【问题描述】:
我正在寻找最佳实践解决方案。
以 stackoverflow 和我问的一个问题为例:
我住在以色列,现在是:
我确实在 ~17:58(现在之前 3 小时)问了一些问题
然而,它确实显示“3 小时前”AND 显示 UTC 时间。 (以色列+2)
所以 要么 它保存了 UTC 和我的偏移量
或它只保存 UTC,并在客户端的 JS 中显示当地时间。
现在我的问题是从数据库的角度来看:
我可以检测到客户端通过JS命令从哪里连接:
new Date().getTimezoneOffset(); //-120
我可以像这样存储它:
data | UTCTime | userOffset
----------------------------------------
... 2012-12-24 15:36:31 -2
问题
这是存储全球事件(日期时间)的最佳解决方案吗?
在 c# 中有一个
DateTimeOffset结构类型,它在其中存储偏移量。 Sql server 中是否有任何等效的解决方案?
【问题讨论】:
-
@Oded 但有一个问题。它说“始终保持统一的日期”,但它也说 - “避免 js 计算”那么 Stackoverflow 是如何知道向我显示本地日期时间的呢?它必须知道我的偏移量。这是由 GEOIP 服务或 JS 完成的。我想知道我上面的解决方案有什么问题。
-
@RoyiNamir,这并不意味着它必须在 JS 中完成。检索所有数据的服务器之旅将修改时间以显示正确的“偏移量”,直至“这是多久以前被询问的”。显然,它显示了正确的 UTC 时间 - 但它知道根据你所在的位置 - 那是
3 hours ago。 -
它不会那样做。它使用 JavaScript
Date对象,默认情况下会给出它正在运行的计算机日期(带有偏移量)。这是根据页面上发布的 UTC 日期计算的。 -
是的。这就是在 Stack Exchange 网站上完成的方式。如果您查看 HTML 源代码,您将看到 UTC 时间戳(通常保存在
title属性中)。他们只是在 JS 中计算一个偏移量,然后用一个字符串替换一个 div 内容。没有服务器端参与。
标签: c# sql-server sql-server-2008 datetime globalization