2

我的应用程序.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

4

2 回答 2

6

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

> 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

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

于 2013-02-14T10:47:29.283 回答
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

于 2013-02-14T10:36:10.847 回答