Time.zone.now.to_date是否相当于Date.today?

时间:2009-12-20 21:40:27

标签: ruby-on-rails ruby

Time.zone.now.to_date是否等同于Date.today

另一种表达方式:Time.zone.now.to_date == Date.today始终为true吗?

如果没有,在应用程序时区内获取与“now”对应的Date对象的最佳方法是什么?

4 个答案:

答案 0 :(得分:41)

它们并不总是一样的。 Time.zone.now.to_date将使用应用程序时区,而Date.today将使用服务器时区。因此,如果两者在不同的日期,那么它们将是不同的。我的控制台的一个例子:

ruby-1.9.2-p290 :036 > Time.zone = "Sydney"
 => "Sydney" 
ruby-1.9.2-p290 :037 > Time.zone.now.to_date
 => Wed, 21 Sep 2011 
ruby-1.9.2-p290 :038 > Date.today
 => Tue, 20 Sep 2011 

答案 1 :(得分:11)

更简单:Time.zone.today

我还写了一个小帮助方法Date.today_in_zone,这使得在特定时区获得“今天”Date非常容易,而无需更改 {{1 }}:

Time.zone

要使用它,只需将其放在 # Defaults to using Time.zone > Date.today_in_zone => Fri, 26 Oct 2012 # Or specify a zone to use > Date.today_in_zone('Sydney') => Sat, 27 Oct 2012 'lib/date_extensions.rb'等文件中。

require 'date_extensions'

答案 2 :(得分:2)

我认为最好的方法是通过以下方式了解当前时间:

Time.current

这将自动检查您是否设置了时区,然后它将调用Time.zone.now,但如果您不是,它将只调用Time.now。

此外,不要忘记在application.rb中设置您的时区

答案 3 :(得分:1)

# system timezone
Time.now.to_date == Date.today

# application timezone
Time.zone.now.to_date == Time.current.to_date == Time.zone.today == Date.current

http://edgeapi.rubyonrails.org/classes/Time.html#method-c-current http://edgeapi.rubyonrails.org/classes/Date.html#method-c-current