我想创建一个Time / DateTime对象,该对象始终代表纽约"上午8点,而不管DST。我怎样才能做到这一点?
Rails文档中的一个建议是使用
Time.zone = 'Eastern Time (US & Canada)'
以下列方式
around_filter :set_time_zone
def set_time_zone
if logged_in?
Time.use_zone(current_user.time_zone) { yield }
else
yield
end
end
但我想避免触及线程变量(这就是Time.use_zone正在做的事情)
答案 0 :(得分:1)
嗯,你可以这样解决问题:
ny = Time.new(Time.now.year,Time.now.month,Time.now.day,8,0,0,"-05:00")
这将返回一个对象ny
,该对象在美国东部时间上午8点(纽约)为您执行当天的当天设置。
答案 1 :(得分:1)
试试这个:
ActiveSupport::TimeZone['Eastern Time (US & Canada)'].parse('8:00')
这将处理日光节省时间问题
> eight_am = ActiveSupport::TimeZone['Eastern Time (US & Canada)'].parse('8:00')
=> Fri, 22 May 2015 08:00:00 EDT -04:00
> eight_am.in_time_zone('America/Los_Angeles')
=> Fri, 22 May 2015 05:00:00 PDT -07:00