2013-09-25 52 views
3

当从Twitter的API获取信息的用户,他们提供与用户的时区两个领域:如何从Twitter API可靠地确定用户的时区?

utc_offset: -14400, 
time_zone: "Indiana (East)" 

不幸的是,这并不能说明全部的故事,因为我不知道这是否UTC偏移在标准时间或夏令时期间计算。除以3600秒后,我得到-4小时,这在夏季有效,但在冬季,正确的值为-5小时。

如果该值总是由夏时制时间值决定的,那么我可以为此编写一个算法,但是在对该主题进行了一些搜索之后,我看到了几个与该假设相矛盾的粘贴输出。 (作为一个简单的例子,this question显示他/她的偏移量为-21600,然后他/她说他/她处于中央时间,如果在夏令时期间计算的话,它将为-18000)。

对我来说价值将会在1月1日之前计算出来并且我在网上找到的几个粘贴输出属于该类别,但我自己的Twitter帐户显示上面列出的这个假设是值得的无效。我的下一个想法可能是在我创建我的账户时计算出来的,但那样看起来也是错误的,因为我可以在任何时候改变我的时区(即使如此,我在11月创建了我的账户,在标准时间而不是白天时间!)。

我最后的想法是,也许值由API请求之日起计算。这很有意义,我拥有的Twitter账户似乎都验证了这一点。但是,the SA question I linked to earlier表明该人员在6月2日回答了问题,即夏令时和他/她的值-21600反映了中央时区的标准时间。

有人在那里解决这个问题?非常感谢!

回答

3

Twitter的前端使用Ruby on Rails。如果您转到自己的Twitter帐户设置并查看时区的可能选项(查看下拉列表中的查看源),则会发现它们与ActiveSupport::TimeZone提供的配对相匹配,如this documentation中所示。虽然似乎有一些被Twitter忽略的Rails理解的区域,但所有的Twitter区域键名都在该列表中。

我问的Twitter在未来的使用标准时区名称,in this developer request.

为什么Rails的限制清单和使用自己的键值?谁知道。我之前曾问过,并得到了很少的回应。 Read here

但你当然可以使用自己的映射字典打开time_zone值转换成标准IANA时区标识符。例如:

  • "Indiana (East)" =>"America/Indiana/Indianapolis"
  • "Central Time (US & Canada)" =>"America/Chicago"

这可以在Rails documentation中找到,并在source code。 (向下滚动到MAPPING。)

然后你可以使用任何你希望的标准IANA /奥尔森/ TZDB实施。它们存在几乎每种语言和平台。欲了解更多详情,请参阅timezone tag wiki。如果您需要特定实施方面的帮助,则需要扩展您的问题以告诉我们您正在使用的语言以及迄今尝试的内容。 (或者考虑询问关于该部分的新问题。)

关于utc_offset字段,twitter没有说清楚他们用什么基础来计算它。我的猜测是,这是用户的当前偏移量,基于您调用API的时间。

更新

我已经添加了我的TimeZoneConverter库转换Rails的时区名称既IANA和Windows标准时区标识符对.NET的支持。如果您使用.NET,则可以使用此库来简化转换并更轻松地保持更新。

相关问题