我的表中有 2 个没有时区的时间列(start_time
和end_time
)。当事件发生时,我需要查看这些列中的哪一个具有start_time < Time.now < end_time
. 问题似乎是 Rails 没有以 UTC 格式保存时间,而是完全按照我在字段中输入的时间来保存时间。我的本地时区是UTC -5
,所以如果我输入一个end_time
of 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_at
和created_at
反映14:30
UTC 时间,但 mystart_time
和end_time
在保存之前未转换为 UTC。
红宝石版本:1.9.3-p392
导轨版本:3.2.13