3

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

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

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

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

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

我最后的想法是,该值可能是按 API 请求的日期计算的。这很有意义,我拥有的所有 Twitter 帐户似乎都验证了这一点。但是,我之前链接到的 SA 问题显示该人在 6 月 2 日回答了这个问题,这是夏令时,他/她的值 -21600 反映了中央时区的标准时间。

有没有人解决这个问题?非常感谢!

4

1 回答 1

3

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

在此开发人员请求中,我已要求 Twitter 将来使用标准时区名称。

为什么 Rails 会限制这个列表并使用自己的键值?谁知道。我之前问过,得到的回应很少。 在这里阅读

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

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

这可以在Rails 文档源代码中找到。(向下滚动到MAPPING。)

然后,您可以使用任何您希望的标准 IANA/Olson/TZDB 实现。它们几乎适用于每种语言和平台。有关更多详细信息,请参阅时区标签 wiki。如果您需要有关特定实施的帮助,您需要扩展您的问题,告诉我们您使用的是什么语言以及到目前为止您已经尝试过什么。(或者考虑就其中的那一部分提出一个新问题。)

关于该utc_offset领域,推特并没有明确说明他们使用什么基础来计算它。我的猜测是它是用户当前的偏移量,基于您调用 API 的时间。

更新 1

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

更新 2

Twitter 的 API现在以这种格式返回时区:

"time_zone": {
    "name": "Pacific Time (US & Canada)",
    "tzinfo_name": "America/Los_Angeles",
    "utc_offset": -28800
},

使用该tzinfo_name字段。完毕。:)

于 2013-09-25T23:50:39.373 回答