在时区发现的铁路 – 不工作

轨道中的区域有问题。

我有CarRoute id: 22783, route_time: "2016-07-07 05:30:00"但在CarRoute.find_by_id(22783).route_time is Thu, 07 Jul 2016 07:30:00 CEST +02:00

所以rails增加2h但是当我想要按时间查找这条路线不起作用时,

 CarRoute.where(:id=>22783,:route_time=> DateTime.new(Date.today.year, Date.today.month, Date.today.day, 7, 0, 0, 0)..DateTime.new(Date.today.year, Date.today.month, Date.today.day, 19, 0, 0, 0)) => [] 

恩尼知道如何找到这个?

Rails以UTC格式存储所有内容,这意味着无论您在分配日期时使用的时区,都将其转换为UTC。 当活动记录加载新记录时,该日期将显示在当前时区(Time.zone)中,这就是当您执行CarRoute.find_by_id(22783).route_time时获得CEST日期的原因,但如果您转到数据库中将看到UTC日期。

以下内容应该为您说清楚:

 > Time.zone => #> > a = Account.first => # a.updated_at => Wed, 06 Jul 2016 18:47:32 UTC +00:00 > Time.zone = "EST" => "EST" > a.reload ... > a.updated_at => Wed, 06 Jul 2016 13:47:32 EST -05:00 

当您使用DateTime.new ,日期是在utc中创建的:

 > d = DateTime.new(2016,7,7) => Thu, 07 Jul 2016 00:00:00 +0000 > d.utc? => true > a.updated_at.utc? => false 

在您的查询位置,您将从7 UTC开始,即CEST上午9点。 尝试以下方法:

 DateTime.new(2016,7,7,7,0,0,0).change(offset: 'CEST')