如何为 rails 和 sqlite 设置时区?

How to set timezone for rails and sqlite?

测试应用:

$ rails new ra1
$ cd ra1
$ ./bin/rails g model m1 dt1:datetime
$ ./bin/rake db:migrate

然后我将config.time_zone = 'Europe/Kiev'添加到config/application.rb,运行控制台:

irb(main):001:0> M1.create dt1: Time.now
   (0.1ms)  begin transaction
  SQL (0.3ms)  INSERT INTO "m1s" ("dt1", "created_at", "updated_at") VALUES (?, ?, ?)  [["dt1", "2015-03-30 11:11:43.346991"], ["created_at", "2015-03-30 11:11:43.360987"], ["updated_at", "2015-03-30 11:11:43.360987"]]
   (33.0ms)  commit transaction
=> #<M1 id: 3, dt1: "2015-03-30 11:11:43", created_at: "2015-03-30 11:11:43", updated_at: "2015-03-30 11:11:43">
irb(main):002:0> Time.now
=> 2015-03-30 14:12:27 +0300
irb(main):003:0> Rails.configuration.time_zone
=> "Europe/Kiev"

我做错了什么?

数据库中的值始终以 UTC 格式存储,无论 time_zone

时区配置仅影响 Ruby 环境。从数据库中获取数据,并将日期转换为选定的时区。这同样适用于新的时间实例,正如您注意到使用 Time.now.

时间在数据库中规范化的主要原因是它允许轻松地将相同的值转换为多个时区,或者在项目的初始阶段后更改时区,而无需重新转换所有日期。在数据库中使用 UTC 是一个好习惯。