【问题标题】:ASP.Net Time LocalizationASP.Net 时间本地化
【发布时间】:2010-10-07 14:59:13
【问题描述】:

我正在开发一个允许用户添加日历条目的网站,然后所有用户都可以在主页上看到这些条目,并带有一些文字说明这些条目要等多久才能成为最新的,例如

条目 1:5 分钟
参赛作品 2:7 小时
条目 3:4 天

我遇到的问题是每个人都可能在不同的时区。我已经决定要在 GMT 中存储所有时间/日期。

我很困惑的是,当用户提交日历条目时,例如 2009 年 1 月 1 日上午 10:30,我需要计算出这个日期时间在 GMT 中的存储时间。有没有办法知道用户的本地时区/时间是什么,以便我可以将其与服务器时间 (GMT) 进行比较以进行转换?

我真的希望这是有道理的。我希望我可以做到这一点,而不必询问用户他们所在的时区,或者强制用户在 GMT 中输入所有日期时间。

【问题讨论】:

    标签: .net asp.net localization timezone


    【解决方案1】:

    在将日期时间发送到服务器之前,将其转换为 GMT 客户端(如果这是一个 Web 应用程序,则在 JavaScript 中)。让服务器只使用 GMT(我会说 UTC)。显示日期/时间也是如此。将 GMT/UTC 发送给客户端,让 JS 本地化。在我看来,这是唯一完全安全的方法,因为您让用户操作系统决定时间应该是多少。

    还有其他原因,如果您只需要知道客户现在的时间,您可以从中获取偏移量(可以通过JS等检索)。但是,如果您需要不同位置的历史和未来日期/时间的准确日期/时间,您最好让客户处理它。

    PS:在我的 TimeZone 实现中,我还使用 UNIX 时间格式进行客户端和服务器之间的通信。这很容易解析,我相信它是 JS 的原生日期时间格式。我现在无法向您展示我的代码,但应该相对容易通过 Google 搜索。

    【讨论】:

      【解决方案2】:

      您唯一的选择(除了明确的用户选择)是从浏览器获取时区偏移:

      var tzOffset = new Date().getTimezoneOffset(); // Minutes
      

      然后你需要使用隐藏字段或其他合适的方式将它发送到服务器。

      这只会为您提供时区偏移量,而不是完整的时区信息。这不是很可靠,所以我仍将选择权留给用户,但使用此信息来预先选择合适的时区。

      【讨论】:

        【解决方案3】:

        如果有人感兴趣,我发现一个网站提供了一个很好的实际操作示例

        http://www.tellingmachine.com/post/2008/05/Rendering-ASPNET-UTC-time-as-local-time-of-the-browsers-time-zone.aspx

        【讨论】:

        • 不错的文章,虽然比我用来启用相同功能的代码要多得多(通过使用 UNIX 时间)。
        猜你喜欢
        • 2010-10-14
        • 2017-01-06
        • 1970-01-01
        • 1970-01-01
        • 2013-05-25
        • 2016-12-18
        • 2011-11-17
        相关资源
        最近更新 更多