2015-11-27 88 views
1

從未處理過時區。沒有聽過愉快的事情。Rails Twitter created_at TimeZone

我正在從推特帳戶中推送推文以在應用程序上發佈。我使用下面的代碼行如下顯示日期:11月26日,2015年

<%= Date::MONTHNAMES[tweet.created_at.month] %> <%= tweet.created_at.day.ordinalize %>, <%= tweet.created_at.year %> 

然而,時間顯示爲0600進一步進入的時間比我的當前位置。我位於-0600的加拿大/美國中部。我所有的本地記錄都是正確的(包括時間和時區),但我認爲這是不同的,因爲我從非本地來源獲取它。

2015-11-27 03:07:04 +0000是從推文的created_at屬性中顯示的日期。

我想改變推文的時間,以便我的時區最低限度是正確的,如果不是太難做我寧願它與所有時區兼容。

+0

[轉換時間從一個時區到另一個在Rails中]的可能重複(http://stackoverflow.com/questions/1386871/convert-time-from-one-time-zone-to-another-in -rails) –

回答

2

您可以使用in_time_zone方法將時間轉換到你想要的時區:

created_at = '2015-11-27 03:07:04 +0000' 
created_at.in_time_zone('Central Time (US & Canada)') 
# => Thu, 26 Nov 2015 21:07:04 CST -06:00 
+1

謝謝你,這完美符合我的要求。 –

+0

真棒。歡迎您:)很高興幫助:) –

0

ActiveRecord的保持時間區和商店的軌道始終在數據庫UTC。在你是從數據庫中檢索那段代碼的代碼中,使用非標準的方式輸出它,這是繞過ActiveRecord的時區轉換。

你可以試試這個

tweet_time = tweet.created_at.in_time_zone 
tweet_time.strftime("#{tweet_time.day.ordinalize} %B, %Y") 

讓您的服務器的時區的時間,可以在config/application.rb

配置有更多的信息,看看herehere與時區工作

爲了讓每個用戶在自己的區域中看到時間,您需要捕獲每個用戶的時區,然後可以在您的動作控制器中執行此操作

around_filter :user_time_zone, :if => :current_user 

def user_time_zone(&block) 
    Time.use_zone(current_user.time_zone, &block) 
end