2013-02-14 36 views
1

我的application.rb中:Rails的時區的ActiveRecord

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的

回答

5

您可以使用本地時間是這樣的:

> 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 

我希望一些這種方法可以幫助你

+0

hm(沒有看到正確的時間(與config.time_zone ='莫斯科' config.active_record.default_timezone =:本地 – brabertaser19 2013-02-14 10:52:20

+0

hm,嘗試刪除config.time_zone ='莫斯科',如果你在莫斯科。得到你的服務器的當前時區 - 這是莫斯科,也許這就足夠了,讓我知道去掉config.time_zone的作品,一般來說你可以在你的模型中使用這樣的內容:skip_time_zone_conversion_for_attributes <<:startTime,但是當你測試第一個選項 – Aleks 2013-02-14 11:03:31

+0

對不起,+ -3小時,將測試.... – brabertaser19 2013-02-14 11:10:27

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(非常聰明的btw),但rails接口提供了所需的偏移量。如果您調用任何對象,例如user.created_at它將抵消數據庫時間以返回區域時間。
這非常有用,因爲它允許爲不同的用戶配置不同的時區。時間將存儲在沒有偏移的情況下,但每個用戶將獲得其等效時區。

Time.now return +00:00,無所謂您的時區。
Time.currentTime.zone.now相同。

+0

在哪裏使用,使用什麼?舉例! – brabertaser19 2013-02-14 10:36:56

+0

爲所有應用程序配置....我沒想到,那裏我可以寫Time.current – brabertaser19 2013-02-14 10:39:14

+0

它不會返回created_at本地時間!例如服務器時間是14-43,但在分貝我看到10-43 ...我不會寫在每個控制器Time.zone.now,我認爲可以通過application.rb – brabertaser19 2013-02-14 10:44:17