【问题标题】:Get UTC timezone offset where hour is X in ruby获取 UTC 时区偏移量,其中小时是红宝石中的 X
【发布时间】:2016-09-01 01:25:23
【问题描述】:

我有一个 cronjob 正在运行,每次运行任务时,我都想从我的数据库中加载联系人,其中那个人的本地时间是我的 cron 系统中的指定时间。

例如:给我当前时区下午 4 点(第 16 小时)的所有联系人。

为了实现这一点,我想做一个简单的函数,返回当前小时为 X 的 UTC timezone offset

这是我想出的最佳解决方案,但我认为还有更有效的方法。

def timezone_offset_for_hour hour
    ["-12:00","-11:00","-10:00", "-09:30","-09:00","-08:00","-07:00","-06:00","-05:00","-04:00","-03:30",
"-03:00","-02:00","-01:00","+00:00","+01:00","+02:00","+03:00","+03:30","+04:00","+04:30","+05:00","+05:30",
"+05:45","+06:00","+06:30","+07:00","+08:00","+08:30","+08:45","+09:00","+09:30","+10:00","+10:30",
"+11:00","+12:00","+12:45","+13:00","+14:00"].select{ |o| Time.now.getlocal(o).hour == hour }
end

解决方案可以是纯 ruby​​ 或包含 Rails 方法。

【问题讨论】:

  • 您肯定尝试过自己解决这个问题。请编辑您的问题以包含您目前所拥有的内容。
  • 向我们展示一些代码,以便我们为您提供帮助
  • @Arvind 绝对不是重复的
  • @Aniket 将在稍后显示代码...进行到一半并挣扎。
  • 我不确定,但它看起来像这样stackoverflow.com/questions/9962038/…

标签: ruby-on-rails ruby


【解决方案1】:

如果你需要数字偏移:

offsets = ActiveSupport::TimeZone.all.map{ |t| t.utc_offset / 3600.0 }.uniq

如果你需要字符串表示:

offset_strs = ActiveSupport::TimeZone.all.map(&:formatted_offset).uniq 

【讨论】:

  • 我绝对喜欢这个,因为它的代码更短,但速度更快?
  • 不知道,我的目标是准确(因为 TZ 偶尔会更改一次)。您可以针对您的特定流程进行基准测试。
猜你喜欢
  • 2012-04-15
  • 2014-02-10
  • 2014-01-09
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 2013-10-15
  • 2011-07-29
相关资源
最近更新 更多