在时区发现的铁路 – 不工作
轨道中的区域有问题。
我有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')