【问题标题】:Worldwide site and Datetime storing?全球站点和日期时间存储?
【发布时间】: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


【解决方案1】:

根据this post:您应该始终保持统一的日期。所以UTC是最好的选择。

另一方面 - 当您有 UTC 日期时,您可以根据某人的时区轻松显示它(不仅适用于作者,也适用于所有人)。

【讨论】:

  • 查看我对 Oded 的回复(作为评论)
  • 答案非常简单——无论您使用哪个时区,偏移量始终相同 :) 它可以使用当前 UTC 时间计算,因为发布时间也是 UTC。
  • 您是否意识到它向我显示了 UTC(这很好)以及我的当地时间?它知道我来自以色列。并且除此之外 - 偏移量并不总是相同的。从不。
  • IT 显示“3 小时前”,可以使用 UTC 时间 (18:48 - 15:36) 计算
  • 您的意思是“3 小时前”是rendered page time (utc) 减去saved post utc time 的结果。所以在这里我根本不需要偏移量......?
【解决方案2】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多