【问题标题】:How can I convert float number to timezone?如何将浮点数转换为时区?
【发布时间】:2016-03-30 21:04:35
【问题描述】:

如何将float 数字转换为时区?

Facebook 使用浮点数分解时区。

timezone    float (min: -24) (max: 24)
            The person's current timezone offset from UTC

user.timezone = auth.extra.raw_info.timezone 在通过 Facebook 注册时捕获用户的时区位置,例如 timezone: -5.0

我想把它转换成timezone: "Eastern Time (US & Canada)"。然后用户可以通过<%= f.time_zone_select :timezone, ActiveSupport::TimeZone.us_zones %>调整他的时区。

潜在的解决方案

t.float    "timezone"
t.string   "time_zone" # somehow turning it into a string after Facebook sets it?

【问题讨论】:

  • ActiveSupport::TimeZone.new(user.timezone).name?
  • 你必须让用户感到抱歉。所以对于你上面的例子:ActiveSupport::TimeZone.new(-5.0).name
  • 时区在最好的时候是相当挑剔的。 -5.0 可能是,也可能是any of these,但在夏令时生效的情况下,您指定的实际上是-4.0。
  • 啊好吧哈哈感谢@tadman 的澄清。 Facebook 实际上生成了timezone: -4.0,我对此感到困惑,因为我在佛罗里达州。我想我会在另一天解决这个问题,然后以-5.0 为例。现在我不会把它挂在我头上:]
  • 时区 != 偏移量。因此,这项任务是不可能的。脸书撒谎。这只是用户上次登录时的偏移量。

标签: ruby-on-rails ruby facebook timezone omniauth-facebook


【解决方案1】:

您可以使用 ActiveSupport::TimeZone 类传入 float 作为参数。 http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html.

免责声明:部分答案来自这个问题的第一部分,How to get timezone from facebook with omniauth?

user.timezone = auth.extra.raw_info.timezone
user.time_zone = ActiveSupport::TimeZone.new(user.timezone).name

您必须考虑user.timezone 为 nil 的时间,否则它会引发错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-21
    • 2021-05-11
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多