【问题标题】:How to set timezone for rails and sqlite?如何为rails和sqlite设置时区?
【发布时间】:2015-06-03 09:13:36
【问题描述】:

测试应用:

$ 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"

我做错了什么?

【问题讨论】:

    标签: ruby-on-rails ruby sqlite rails-activerecord


    【解决方案1】:

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

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

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

    【讨论】:

    • 我想如果上面写着#&lt;M1 ... dt1: "2015-03-30 11:11:43" ...&gt;,那就是我在ruby 的立场。事实证明 M1.first.dt1 返回正确的值 (Mon, 30 Mar 2015 14:11:43 EEST +03:00)。
    猜你喜欢
    • 2016-06-25
    • 2014-11-16
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多