【问题标题】:How to figure out which timezone a (ASP.NET / MonoRail) website user is in?如何确定(ASP.NET / MonoRail)网站用户所在的时区?
【发布时间】:2008-12-10 11:43:57
【问题描述】:

所以,我正在设置一个应该过期的 cookie。但是,我希望这可以在世界范围内使用。所以我需要根据用户的时区调整我的到期日期。

所以,我需要在服务器端找出用户的时区。

有没有办法在 BCL 中做到这一点?就像依靠正确设置 CultureInfo.CurrentUICulture 之类的东西(我相信 MonoRail LocalizationFilter 确实如此,但尚未正确检查),然后确定用户所在的时区(以及考虑夏令时)也有)基于此?

.NET 3.5 中有 System.TimeZoneInfo,但很少有关于 Id 是什么的文档 - 无论它们是 ISO 代码还是什么。

或者我是否要依赖客户端的某些东西从例如 Date.getTimezoneOffset() 推送此信息? 我宁愿避免这种情况,因为,嗯,客户端撒谎。

【问题讨论】:

  • 嗯。我刚刚看了code.google.com/p/gears/wiki/GeolocationAPI,它至少可以返回一个国家代码。几乎是我想要的……
  • 仅供参考,cookie 时间为格林威治标准时间。因此,如果您在服务器上设置它们,假设客户端没有将它们的时区修改为某个奇怪的值,它将在它应该过期的时候过期。尽管如此,即使他们有,它仍然会在 24 小时内到期,除非他们设置的日期完全错误。

标签: c# asp.net localization internationalization castle-monorail


【解决方案1】:

这很简单。在服务器上,放置一个 asp:hidden 字段并用当前服务器的日期/时间填充它。在客户端上,从客户端上的当前日期(新日期())中减去隐藏字段中的日期/时间,您就得到了与 GMT 的偏移量。在服务器上执行反向操作(例如,隐藏字段中的 new Date(),从隐藏字段值中减去服务器时间)。

【讨论】:

  • 在考虑夏令时时这不起作用。并非所有地方都遵守夏令时,世界各地都有不同的规则(据我回忆)
  • 嗯?当然可以。您正在获取 CURRENT 偏移量来执行当前时移。它会一直有效。我并不是说要将偏移量保存在持久存储中,只是将其用作该页面请求的值。我很清楚 DST,因为我居住的州不执行 DST。
【解决方案2】:

除了 IP 地理位置(由于其他人提到的原因,这是一个坏主意)或 JavaScript(也不是很好,因为它太模糊(由于时区)),没有办法获取用户的时区。

您最好的选择是允许用户通过某种用户控制面板自行设置时区。这样您就可以准确地知道用户所在的时区,并允许用户确认时区。

未来浏览器应该会添加一些很棒的地理定位功能,但要在生产环境中使用还有很长的路要走。

如果您决定使用 JavaScript 进行自动检测,我建议您使用这些脚本,它们会扫描用户系统上的日期以找出 DST 何时发生并返回 GMT 偏移量(即使在 DST 内)。

http://www.attackwork.com/BlogEntry/3/Time-zone-detect-and-ignore-Daylight-Saving-Time-DST/Default.aspx http://www.attackwork.com/BlogEntry/11/Daylight-Saving-Time-DST-Detect/Default.aspx

仍然不是一个非常好的主意,但它确实有效。

【讨论】:

    【解决方案3】:

    没有确定客户时区的真正好方法。您可以跟踪他们的 IP 地址,然后尝试为其附加位置,但这很棘手且容易出错(一些定位器将所有 AOL 使用的定位器都放在弗吉尼亚州)

    我会说最好在客户端进行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2011-01-28
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多