是Time.zone.now.to_date
相当于Date.today
?Time.zone.now.to_date是否等同于Date.today?
另一种说法:Time.zone.now.to_date == Date.today
总会是true
?
如果不是,在应用程序时区中获取与“now”对应的Date对象的最佳方式是什么?
是Time.zone.now.to_date
相当于Date.today
?Time.zone.now.to_date是否等同于Date.today?
另一种说法:Time.zone.now.to_date == Date.today
总会是true
?
如果不是,在应用程序时区中获取与“now”对应的Date对象的最佳方式是什么?
它们并不总是相同的。 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
请注意这个问题:http://stackoverflow.com/a/27397193/115363 – 2016-03-25 15:34:43
即使简单:Time.zone.today
我也写了一个小的辅助方法Date.today_in_zone
,使得它很容易得到一个“今天” Date
特定时间段,而不必变化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'
。
class Date
def self.today_in_zone(zone = ::Time.zone)
::Time.find_zone!(zone).today
end
end
我认为最好的办法就是通过学习当前时间:
Time.current
这会自动检查是否已设置时区,然后它会调用Time.zone.now,但如果你没有它只会调用Time.now。
此外,不要忘记设置时区在application.rb中
# 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
这是日期和时间,以避免时区陷阱有很大的参考:HTTP: //danilenko.org/2012/7/6/rails_timezones/ – Matt 2013-01-09 21:39:59
正确的方法是这样的:http://stackoverflow.com/a/27397193/115363 – 2016-03-25 15:34:48