Time.zone.now.to_date
是否等同于Date.today
?
另一种表达方式:Time.zone.now.to_date == Date.today
始终为true
吗?
如果没有,在应用程序时区内获取与“now”对应的Date对象的最佳方法是什么?
答案 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