0

我在查询时遇到问题,因为午夜转换未按预期工作。

time = Date.today.midnight #=> Mon, 15 Jul 2013 00:00:00 BRT -03:00

time.class #=> ActiveSupport::TimeWithZone

condition = Task.arel_table[:scheduled_to].gt(time)

condition.to_sql #=> "`tasks`.`scheduled_to` > '2013-07-15 03:00:00'"

我期待生成的 sql 是

`tasks`.`scheduled_to` > '2013-07-15 00:00:00'"

我的时区是 GMT -3。如果我更改时区使其与 GMT -5 匹配,则生成的 sql 是

condition.to_sql #=> "`tasks`.`scheduled_to` > '2013-07-15 05:00:00'"
  • 导轨 4.0.0
  • 红宝石 2.0.0p247

有什么方法可以忽略时区,使查询的行为符合预期?

4

2 回答 2

1

时区与 UTC (0000) 相关,因此您必须将其从日期中删除。

DateTime.now.midnight.utc #=> '2013-08-23 03:00:00 +0000'

现在,只需摆脱补偿时间。

DateTime.now.midnight.utc.change({:hour => 0, :min => 0}) #=> '2013-08-23 00:00:00 +0000'

不确定是否有更清洁的方法,但它对我有用(Ruby 1.9.3p385)。

于 2013-08-23T12:47:35.157 回答
0

Date.current或者Date.today.midnight.utc应该已经解决了问题。

于 2020-01-22T08:32:14.493 回答