为了得到今天的约会:
Date.today # => Fri, 20 May 2011
我想在特定时区得到今天的日期,比如'Melbourne'
。
我的application.rb
中有以下设置:
config.time_zone = 'Melbourne'
我设置:
Time.zone = 'Melbourne'
在每次操作之前,在我的应用程序控制器中。
然而,它没有帮助(我想因为这些设置只影响存储在数据库中的日期)。
我怎样才能在'Melbourne'
获取今天的日期?
答案 0 :(得分:59)
Date
个对象不一定有时区,但Time
个对象有。您可以将其作为Time
进行尝试,然后转换回Date
:
Time.now.to_date
# => Thu, 19 May 2011
Time.now.in_time_zone('Melbourne').to_date
# => Fri, 20 May 2011
答案 1 :(得分:56)
您应该可以这样做:Time.current
。这将显示墨尔本的当前时间,如果Time.zone
设置为。
答案 2 :(得分:31)
答案 3 :(得分:14)
似乎Time.zone.today
也有效。
答案 4 :(得分:12)
如果您想在某个指定的时区内获得“今天”而不必更改Time.zone
,我会做一些像fl00r和Dylan Markow建议的事情:
Time.now.in_time_zone('Melbourne').to_date
或者这个:
Time.find_zone!('Melbourne').today
我写了一个小帮助方法Date.today_in_zone
,这使得为时区获得“今天”Date
更加容易:
# Defaults to using Time.zone
> Date.today_in_zone
=> Fri, 26 Oct 2012
# Or specify a zone to use
> Date.today_in_zone('Melbourne')
=> Sat, 27 Oct 2012
我认为它比Time.find_zone!('Melbourne').today
...
要使用它,只需将其放在'lib/date_extensions.rb'
和require 'date_extensions'
等文件中。
class Date
def self.today_in_zone(zone = ::Time.zone)
::Time.find_zone!(zone).today
end
end
答案 5 :(得分:5)
使用DateTime
类
DateTime.now.in_time_zone 'Melbourne'
答案 6 :(得分:2)
ruby-1.9.2-p0 :004 > Time.now
=> 2011-05-19 15:46:45 +0100
ruby-1.9.2-p0 :006 > Time.now.in_time_zone('Melbourne')
=> Fri, 20 May 2011 00:47:00 EST +10:00
ruby-1.9.2-p0 :007 > Time.now.in_time_zone('Melbourne').to_date
=> Fri, 20 May 2011
答案 7 :(得分:2)
答案 8 :(得分:1)
在Rails 3中,您可以通过在Date对象上调用to_time_in_current_zone来执行此操作。
Date.today.to_time_in_current_zone