在没有明确询问用户的情况下收集用户时区的最佳方法是什么?

时间:2010-07-30 12:01:01

标签: javascript iphone ruby-on-rails timezone

对于我的项目(基于Web和iPhone的应用程序),我需要收集用户的时区,以便向他/她显示相关数据。我能想到的一些可能性是:

1.使用用户的IP获取它(但如果用户在代理服务器后面则该怎么办)
2.发送请求参数(但这需要额外的参数附加请求。或者可能会收集一次会话)
3.通过cookie传递(与参数中的设置具有相同的含义)
4.基于我在注册时收集的用户邮政编码,但对于可以浏览应用程序的未注册用户,将无法查看相关数据。

总而言之,我现在想到的每种方法都有一个或多个缺点。我只是想知道其他方法是什么以及哪种方法最适合用户体验不受影响且用户未明确询问他/她的时区。此方法应适用于网络和iPhone

5 个答案:

答案 0 :(得分:2)

对于获取时区的iPhone SDK ...这将为您提供所需的功能,并将其调整为夏令时。

NSTimeZone *systimeZone = [NSTimeZone systemTimeZone];
NSString *timeZoneString = [systimeZone localizedName:NSTimeZoneNameStyleShortStandard locale:currentLocale];
if([systimeZone isDaylightSavingTimeForDate:[NSDate date]]){
    timeZoneString = [systimeZone localizedName:NSTimeZoneNameStyleShortDaylightSaving locale:currentLocale];
}

apple docs上的TimeZone对象有很多信息。

答案 1 :(得分:1)

使用JavaScript,您可以使用new Date().getTimezoneOffset(),如果有任何帮助的话。根据{{​​3}},这将在几分钟内得到你的补偿......在我的情况下(芬兰),-180。

答案 2 :(得分:0)

我会使用JavaScript收集用户的当前时间,并将其发送到第一个请求以持续整个会话。

你必须允许偏差(也许+ - 15分钟)但是应该可以通过这种方式非常可靠地确定时区。

下一个最好的事情可能是确实通过地理定位服务运行用户的IP来查找国家/地区。但是,您必须维护一个国家/地区到时区的地图才能正确执行此操作,并且您将遇到有多个时区(如美国或俄罗斯)的国家/地区的问题。

答案 3 :(得分:0)

我对iPhone的开发知之甚少,但API中可能会有一些内容允许您访问用户的偏好,甚至是显示给他们的当前时间。

至于网络,一般都在this question中详细介绍。

答案 4 :(得分:0)

对于网络,您应该能够从用户的浏览器中获取它。对于iPhone,我认为有一个API。至少,当我更改时区时,我的iPhone显示正确的本地时间的ISTR(我想它在连接到本地时从本地手机信号塔获取此信息)。