我正在运行cronjob,并且每次运行任务时,我都希望从数据库中加载联系人,其中该个人的本地时间是我的cron系统中的指定时间。
例如:给我在当前下午4点(第16小时)的时区中的所有联系人。
为了实现这一点,我想做一个简单的函数,该函数返回当前小时为X的UTC时区偏移量。
这是我想出的最好的解决方案,但认为还有一些更有效的方法。
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
该解决方案可以是纯红宝石,也可以包括Rails方法。
如果需要数字偏移量:
offsets = ActiveSupport::TimeZone.all.map{ |t| t.utc_offset / 3600.0 }.uniq
如果您需要字符串表示形式:
offset_strs = ActiveSupport::TimeZone.all.map(&:formatted_offset).uniq
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句