如何确定(ASP.NET / MonoRail)网站用户所在的时区?

时间:2008-12-10 11:43:58

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

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

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

有没有办法在BCL中这样做?就像在,依赖于CultureInfo.CurrentUICulture来正确设置(我相信MonoRail LocalizationFilter可以,但尚未正确检查),然后确定用户所在的时区(以及夏令时的计算)那里也基于那个?

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

或者我是否会依赖客户端的某些东西来推送这些信息,例如Date.getTimezoneOffset()? 我宁愿避免,因为客户端也是如此。

3 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

确定客户时区并不是很好的方法。您可以跟踪他们的IP地址,然后尝试将位置附加到它,但这很棘手且容易出错(某些定位器将所有AOL用于弗吉尼亚州)

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