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

Datetime 如何从Twitter API可靠地确定用户的时区?,datetime,twitter,timezone,Datetime,Twitter,Timezone,当从Twitter的API为用户获取信息时,它们提供了两个与用户时区相关的字段: utc_offset: -14400, time_zone: "Indiana (East)" 不幸的是,这并不能说明全部情况,因为我不知道UTC偏移量是在标准时间还是夏令时计算的。除以3600秒,我得到-4小时,这在夏季有效,但在冬季正确的值是-5小时 如果该值总是由夏令时值确定,那么我可以为此编写一个算法,但是在对该主题进行一些搜索之后,我看到了几个与该假设相矛盾的粘贴输出。(作为一个简单的例子,显示他/她的

当从Twitter的API为用户获取信息时,它们提供了两个与用户时区相关的字段:

utc_offset: -14400,
time_zone: "Indiana (East)"
不幸的是,这并不能说明全部情况,因为我不知道UTC偏移量是在标准时间还是夏令时计算的。除以3600秒,我得到-4小时,这在夏季有效,但在冬季正确的值是-5小时

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

对我来说,从1月1日开始计算这个值是有意义的,我在网上发现的几个粘贴的输出都属于这个类别,但是我自己的Twitter帐户显示了上面列出的值,这个假设是无效的。我的下一个想法是,它可能是在我创建我的帐户时计算出来的,但这似乎也是错误的,因为我可以在以后的任何时候更改我的时区(即便如此,我在11月份创建了我的帐户,当时我本应该是标准时间,而不是白天!)

我最后的想法是,这个值可能是根据API请求的日期来计算的。这很有道理,我拥有的推特账户似乎都证实了这一点。但是,显示此人在6月2日回答了问题,即夏令时,他/她的值-21600反映了中央时区的标准时间


有人能解决这个问题吗?非常感谢

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

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

为什么Rails限制这个列表并使用它们自己的键值?谁知道呢。我以前问过,但得到的答复很少

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

  • “印第安纳州(东部)”
    =>
    “美国/印第安纳州/印第安纳波利斯”
  • “中部时间(美国和加拿大)”
    =>
    “美国/芝加哥”
这可以在和中找到。(向下滚动至
映射

然后,您可以使用任何标准的IANA/Olson/TZDB实现。它们存在于几乎每种语言和平台上。有关更多详细信息,请参阅。如果您需要特定实现方面的帮助,您需要扩展您的问题,告诉我们您使用的是什么语言以及您迄今为止尝试了什么。(或者考虑问一个新的问题。) 关于
utc_offset
字段,twitter没有明确说明他们使用什么基础来计算它。我猜这是用户当前的偏移量,基于调用API的时间

更新1

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

更新2

Twitter的API采用以下格式:

"time_zone": {
    "name": "Pacific Time (US & Canada)",
    "tzinfo_name": "America/Los_Angeles",
    "utc_offset": -28800
},
使用
tzinfo\u名称
字段。完成。:)