【问题标题】:How to implement timezone in a web application?如何在 Web 应用程序中实现时区?
【发布时间】:2009-01-27 22:38:56
【问题描述】:

我想在我的 Web 应用程序中实现时区。我研究并看到大多数网络应用程序使用 GMT 下拉菜单,这里是该下拉菜单的链接http://www.attackwork.com/BlogEntry/6/Time-Zone-Dropdown-Select-List/Default.aspx

然后我看到这篇文章建议 UTC 是实现时区的方法。 http://aspnet.4guysfromrolla.com/articles/081507-1.aspx 基本上是说不要使用 DateTime.Now 而是使用 DateTime.UtcNow

我的问题是,

  1. 是否有 UTC 时区的下拉菜单,就像我显示的第一个链接在 GMT 时区一样?
  2. 我真的应该使用 UTC 还是 GMT?

【问题讨论】:

    标签: asp.net timezone


    【解决方案1】:

    .NET 3.5 提供了TimeZoneInfo 类,它可以让您相对简单地使用时区填充下拉列表。 GMT 在 UTC 之前出现,UTC 于 1972 年 1 月 1 日正式成立。有关更多信息,请参阅this link。就今天而言,这两者几乎是同义词,尽管它们具有不同的历史渊源。为您的目的使用更好的外观和功能。

    【讨论】:

      【解决方案2】:

      我不确定这是否是您想要问的,但在您的数据库中,您应该始终以 UTC/GMT 格式存储时间戳(正如其他人所指出的,它们的含义基本相同)。对于您的 Web 应用程序的每个用户,存储时区首选项。

      然后,每当您向用户显示某事的时间戳时,将数据库中的 UTC 时间转换为用户的时区。

      【讨论】:

        【解决方案3】:

        GMT(格林威治标准时间)与 UTC(世界协调时间)相同。这不是一个非此即彼的选择 - 使用它:)

        【讨论】:

        • GMT 实际上并不相同。它们有不同的起源。请参阅我在下面发布的链接。
        • 有趣。我知道命名起源不同,但我不知道具体的区别。
        【解决方案4】:

        尽可能使用本地化设置、功能和特性。

        【讨论】:

          【解决方案5】:

          如果您不是针对 SQL Server 2008 运行或不想将时区管理抽象到数据库中,则应将所有时间存储为 UTC/GMT 并根据用户的配置文件设置应用时区差异,以便用户来自世界各地的人都可以看到他们当地时间的事件的时间戳。

          【讨论】:

            【解决方案6】:

            UTC 和 GMT 之间的区别可能太细了,无法在您的代码中打扰。但是,始终以零时区偏移在内部保存和处理时间可能是一个好主意,并将其作为演示问题处理。

            也可以使用 JavaScript 来确定用户可能的时区:检查一对合理接近至点的Date 对象的时区偏移量(即使 1 月 1 日和 7 月 1 日也是一个合适的近似值)以获得粗略的时区鉴别。随意使用此信息来确定默认时区,但允许用户更改它:JavaScript 没有提供足够的详细信息来选择具有国家和地区历史变化的确切时区,并且它可能无法由无论如何都是用户。

            【讨论】:

              猜你喜欢
              • 2010-10-16
              • 1970-01-01
              • 1970-01-01
              • 2014-01-15
              • 2012-10-31
              • 2014-04-02
              • 1970-01-01
              • 2010-09-07
              • 1970-01-01
              相关资源
              最近更新 更多