gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:04:51 25 4
gpt4 key购买 nike

当从 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 反射(reflect)了中央时区的标准时间。

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

最佳答案

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

我已经要求 Twitter 将来使用标准时区名称,in this developer request.

为什么 Rails 限制这个列表并使用他们自己的键值?谁知道。我之前问过,得到的回应很少。 Read here .

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

  • “印第安纳州(东部)” => “美国/印第安纳州/印第安纳波利斯”
  • “中部时间(美国和加拿大)” => “美国/芝加哥”

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

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

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

更新 1

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

更新 2

Twitter 的 API now returns the time zone采用这种格式:

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

使用 tzinfo_name 字段。完毕。 :)

关于datetime - 如何从 Twitter API 可靠地确定用户的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19013206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com