Rails 3:如何在特定的时区取得今天的date?

为了得到今天的date我做:

Date.today # => Fri, 20 May 2011 

我想在特定的时区取得今天的date,比如'Melbourne'

我在我的application.rb有以下设置:

 config.time_zone = 'Melbourne' 

我设定:

 Time.zone = 'Melbourne' 

在我的应用程序控制器每个动作之前

但是,这并没有帮助(我猜是因为这些设置只影响存储在数据库中的date)。

我怎么能在'Melbourne'得到今天的date?

你应该可以这样做: Time.current 。 如果这是Time.zone的设置,那将显示当前在墨尔本的时间。

Date对象不一定有时区,但Time对象。 你可以试试它作为一个Time ,然后转换回Date

 Time.now.to_date # => Thu, 19 May 2011 Time.now.in_time_zone('Melbourne').to_date # => Fri, 20 May 2011 

Date.current可能是最清晰和简洁的方式: http : Date.current

看来Time.zone.today也有效。

如果你想在某个指定的时区得到“今天”而不必改变Time.zone ,我会做类似fl00r和Dylan Markow的build议:

 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 

使用DateTime

 DateTime.now.in_time_zone 'Melbourne' 
 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 

对于有效的时区名称,请参阅 : http : //api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

在Rails 3中,您可以简单地通过在Date对象上调用to_time_in_current_zone来做到这一点。

 Date.today.to_time_in_current_zone 
Interesting Posts