如何从Twitter API可靠地确定用户的时区?

时间:2013-09-25 19:07:39

标签: datetime twitter timezone

当从用户的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反映了中心时区的标准时间。

有谁解决了这个问题?非常感谢!

1 个答案:

答案 0 :(得分:3)

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

我已经要求Twitter在将来使用标准时区名称this documentation

为什么Rails会限制此列表并使用自己的键值?谁知道。我之前已经问过,并且得到了很少的回应。 in this developer request.

但您当然可以使用他们的映射字典将time_zone值转换为标准的IANA时区标识符。例如:

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

可以在Read hereRails documentation中找到。 (向下滚动到MAPPING。)

然后您可以使用您希望的任何标准IANA / Olson / TZDB实施。它们适用于几乎所有语言和平台。有关详细信息,请参阅source code。如果您需要特定实施方面的帮助,则需要扩展您的问题,告诉我们您使用的语言以及目前为止所尝试的内容。 (或者考虑问一个关于其中一部分的新问题。)

关于utc_offset字段,twitter并没有明确说明它们用来计算它的依据。我的猜测是,根据您调用API的时间,它是用户的当前偏移量。

<强>更新

我已经添加了对在我的timezone tag wiki .NET库中将Rails时区名称转换为IANA和Windows标准时区标识符的支持。如果您使用的是.NET,则可以使用此库来简化转换并更轻松地掌握更新。