在Rails 4中,将当前时区中的Date转换为DateTime的最佳方法是什么?

Way*_*Lue 14 datetime ruby-on-rails date

我正在使用Rails 4.2.我有一个Date我想转换为DateTime.如果我使用现有to_datetime方法,它会在GMT中转换它.(我现在已经看了大约一个小时的线程,但是如果它存在的话就找不到这个确切的问题所以请提前道歉!)

irb(main):030:0> Date.current
=> Wed, 19 Aug 2015
irb(main):031:0> Date.current.to_datetime
=> Wed, 19 Aug 2015 00:00:00 +0000
Run Code Online (Sandbox Code Playgroud)

如果我然后尝试使用in_time_zone它,它会将其转换为当前时区,但也会从日期中减去偏移量.

irb(main):032:0> Date.current.to_datetime.in_time_zone
=> Tue, 18 Aug 2015 17:00:00 PDT -07:00
Run Code Online (Sandbox Code Playgroud)

如何在现有时区将现有转换Date为a DateTime

Way*_*Lue 18

这是我能想到的最佳答案.

Time.zone.at(Date.current.to_time).to_datetime
Run Code Online (Sandbox Code Playgroud)

  • 默认情况下,`Date.current.to_time`实际上使用本地时区,因此`Date.current.to_time.to_datetime`应该相同. (4认同)

Mar*_* T. 5

我有一个类似的问题,我这样做:

Time.use_zone("Europe/Berlin") do
  midnight = Time.zone.parse(@date.to_s)
end
Run Code Online (Sandbox Code Playgroud)

它基本上是在午夜处于目标时区中时,将日期重新创建为Time实例,而无需“移动” Time实例。


Kel*_*gan 5

接受的答案对我不起作用,因为Date.current.to_time将日期转换为我的:local时区,即 UTC,而不是我配置的时区,即 PST。

相反,我使用了Date.current.in_time_zone.to_datetime,我在这里找到的:https : //www.varvet.com/blog/working-with-time-zones-in-ruby-on-rails/