Rails 3:如何在特定时区获取今天的日期?

时间:2011-05-19 14:43:30

标签: ruby-on-rails ruby-on-rails-3 date timezone

为了得到今天的约会:

Date.today    # => Fri, 20 May 2011

我想在特定时区得到今天的日期,比如'Melbourne'

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

config.time_zone = 'Melbourne'

我设置:

Time.zone = 'Melbourne'
在每次操作之前,在我的应用程序控制器中

然而,它没有帮助(我想因为这些设置只影响存储在数据库中的日期)。

我怎样才能在'Melbourne'获取今天的日期?

9 个答案:

答案 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)

Date.current

Date.current可能是最明确和简洁的方式,并且已添加到Rails 3中。

$ Date.current
#=> Sat, 14 Jul 2018

http://apidock.com/rails/v3.2.13/Date/current/class

答案 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)

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

答案 8 :(得分:1)

在Rails 3中,您可以通过在Date对象上调用to_time_in_current_zone来执行此操作。

Date.today.to_time_in_current_zone