1

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

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

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

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

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

4

3 回答 3

1

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

于 2008-12-10T21:45:32.173 回答
1

除了 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

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

于 2008-12-12T03:02:26.933 回答
0

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

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

于 2008-12-10T12:08:21.403 回答