【问题标题】:How do I get the utc offset from an address?如何从地址获取 utc 偏移量?
【发布时间】:2013-08-28 21:47:42
【问题描述】:

我有一个使用 gmaps4rails 存储位置的 RoR 应用程序。根据该位置的地址,我想猜测 UTC 偏移量(“+00:00”、“-05:00”、..)。 是否有可能或者我必须要求用户(并信任他们)设置正确的时区偏移量?

顺便说一句,我知道一年中有些地方的时区偏移量可能会发生变化。在这种情况下,我应该使用区域名称而不是偏移量。有什么宝石可以帮助解决这些问题吗?

谢谢,

【问题讨论】:

  • 你检查过timezone gem 吗?
  • 你有什么样的地址? IP地址?坐标?邮政地址?
  • 我不确定如何从地址中提取时区,而是将时间转换为不同的时区; rails 有方法in_time_zone。所以你可以像Time.now.in_time_zone('Tokyo')
  • 感谢 Matt 提供的链接,它非常有用。我尝试了 google_timezone gem,它询问 Google Timezone Web Service,它可以满足我的所有需求。我使用的地址是纬度/经度。 in_time_zone 也会很有帮助。

标签: ruby-on-rails ruby timezone gmaps4rails timezone-offset


【解决方案1】:

为此,使用任意数量的网络服务将地址定位到纬度/经度坐标。然后查看How to get a time zone from a location using latitude and longitude coordinates? 中的选项,其中列出了 Yevgeniy 提到的 Ruby gem 以及其他选项。

不要尝试获取位置的偏移量 - 它可能会针对 DST 定期更改。改为获取时区,例如Asia/SingaporeAmerica/New_York。然后使用它来确定特定时间点的偏移量。

请参阅the timezone tag wiki 中的“时区!= 偏移量”。

【讨论】:

    【解决方案2】:

    即使您得到了解决方案,最好还是向用户询问。如果美国用户想根据新加坡时区查看他/她的日期时间(因为那是他/她自己的),他/她应该这样显示。

    【讨论】:

    • 谁说是给用户的?他问如何获得一个位置的时区。也许他只是想根据客户的地址了解客户所在位置的时间。用例有效。
    • 我存储的地址是用户和他/她的朋友应该见面的地方。因此,在这种情况下,最好的解决方案是使用本地时间。
    • @techvineet,您的替代方案很有趣,但并不能真正回答问题。感谢您的评论。
    • @techvineet,对不起,我没有足够的声望来投反对票!