2

我的表中有 2 个没有时区的时间列(start_timeend_time)。当事件发生时,我需要查看这些列中的哪一个具有start_time < Time.now < end_time. 问题似乎是 Rails 没有以 UTC 格式保存时间,而是完全按照我在字段中输入的时间来保存时间。我的本地时区是UTC -5,所以如果我输入一个end_timeof 09:00:00,我希望它被保存到数据库中14:00:00,但它被保存为09:00:00,所以当我稍后运行start_time < Time.now < end_time查询时,我得到了错误的结果(我是在这 5 个小时之前关闭)。

这是一个示例(模型称为 TimeParameter):

1.9.3-p392 :001 > TimeParameter.create(start_time: "00:30:00", end_time: "09:00:00")
   (7.0ms)  SELECT * FROM geometry_columns WHERE f_table_name='time_parameters'
   (0.2ms)  BEGIN
  SQL (9.8ms)  INSERT INTO "time_parameters" ("created_at", "day_of_week", "end_time", "start_time", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["created_at", Tue, 23 Jul 2013 14:29:06 UTC +00:00], ["day_of_week", nil], ["end_time", 2000-01-01 09:00:00 UTC], ["start_time", 2000-01-01 00:30:00 UTC], ["updated_at", Tue, 23 Jul 2013 14:29:06 UTC +00:00]]
   (308.9ms)  COMMIT
 => #<TimeParameter id: 24, start_time: "2000-01-01 00:30:00", end_time: "2000-01-01 09:00:00", day_of_week: nil, created_at: "2013-07-23 14:29:06", updated_at: "2013-07-23 14:29:06"> 

本地时间是 ~09:30,UTC 是 ~14:30 请注意updated_atcreated_at反映14:30UTC 时间,但 mystart_timeend_time在保存之前未转换为 UTC。

红宝石版本:1.9.3-p392

导轨版本:3.2.13

4

0 回答 0