【问题标题】:Rails timezone activerecordRails 时区活动记录
【发布时间】:2013-02-14 10:23:39
【问题描述】:

我的应用程序.rb:

config.time_zone = 'Moscow'
config.time_zone = "(GMT+04:00) Moscow"
config.active_record.default_timezone = 'Moscow'
config.active_record.default_timezone = :local

当我运行这个命令时,我得到:

1.9.3-p362 :001 > Time.now
 => 2013-02-14 14:18:42 +0400
1.9.3-p362 :002 > Time.zone.now
 => Thu, 14 Feb 2013 10:18:52 UTC +00:00

所以在 db 中我看到 10:18:52 UTC +00:00。 但是要配置什么以及如何配置才能看到这样的时间,例如在 Time.Now 中? (当我向 db 插入新行时,我必须看到 Time.now 给出的时间,要配置什么?)

服务器时间是莫斯科....

db 也是 mysql

【问题讨论】:

    标签: ruby-on-rails ruby timezone


    【解决方案1】:

    你可以像这样使用当地时间:

    > current_time = Time.now.utc
      => 2013-02-14 15:15:58 UTC 
    > current_time .localtime
      => 2013-02-14 10:15:58 -05 hours
    

    你也可以使用:

    Time.now.utc.in_time_zone("Moscow")
    

    但是对于您的问题的答案,解决方案可能是这样设置:

    config.time_zone = 'Moscow' (don't set this - delete this line)
    config.active_record.default_timezone = :local
    

    你也可以像这样使用你的当地时间:

    Time.local_time
    

    我希望其中一些方法可以帮助你

    【讨论】:

    • hm( 没有看到正确的时间( with config.time_zone = 'Moscow' config.active_record.default_timezone = :local
    • hm,如果您在莫斯科,请尝试删除 config.time_zone = 'Moscow' 。然后它将获取您服务器的当前时区 - 即莫斯科。也许这就足够了。让我知道删除 config.time_zone 有效。一般来说,你可以在你的模型中使用这样的东西:skip_time_zone_conversion_for_attributes
    • :) 第三次尝试.. 我不知道你到底想要完成什么,但你可以使用类似 Time.zone.now 的东西
    • 我只是想在rails app中看到,creater_ar的顺序比如服务器时间,而不是现在...
    • makandracards.com/makandra/… 这对我有帮助
    【解决方案2】:

    在您的 application.rb 中包含以下几行:

    config.time_zone = 'Moscow'
    config.active_record.default_timezone = 'Moscow'
    

    现在您已经设置了时区:

    Time.now
    => 2013-02-14 11:14:46 +0000 
    Time.current
    => Thu, 14 Feb 2013 15:14:48 MSK +04:00 
    user = User.create(name: 'test')
    => #<User id: 6, name: "test", created_at: "2013-02-14 11:15:00", updated_at: "2013-02-14 11:15:00"> 
    user.created_at
    => Thu, 14 Feb 2013 15:15:00 MSK +04:00 
    

    如您所见,尽管 rails 将时间存储为 UCT +0000(顺便说一句非常聪明),但 rails 接口提供了所需的偏移量。如果您调用任何对象,例如user.created_at,它将偏移数据库时间以返回区域时间。
    它非常有用,因为它允许为不同的用户配置不同的时区。时间将无偏移地存储,但每个用户将获得其等效的时区。

    Time.now 返回 +00:00,与您的时区无关。
    Time.current 与 Time.zone.now 相同。

    【讨论】:

    • 在哪里用,用什么?举个例子!
    • 它不会返回 created_at 的本地时间!例如服务器时间是 14-43,但在 db 中我看到 10-43...我不会在每个控制器中写入 Time.zone.now,我认为可以通过 application.rb 配置一些东西
    • 我需要为所有用户设置,在所有应用时区+4,并且这个时间必须设置为所有创建的字段!现在没有
    • created_at(或任何其他时间)将保存为 UTC +0000,但根据区域,您的用户将始终看到带有偏移的时间。
    • 现在,我没有看到正确的时间!但必须...我必须为所有人设置一个时区:用户和管理员
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-01
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多