2010-04-23 67 views

回答

181
time.in_time_zone(time_zone) 

例子:

zone = ActiveSupport::TimeZone.new("Central Time (US & Canada)") 
Time.now.in_time_zone(zone) 

或只是

Time.now.in_time_zone("Central Time (US & Canada)") 

您可以通過執行找到的ActiveSupport時區的名稱:

ActiveSupport::TimeZone.all.map(&:name) 
# or for just US 
ActiveSupport::TimeZone.us_zones.map(&:name) 
+0

在IRB,當我嘗試Time.now.in_time_zone( 'CST'),我得到的錯誤 「未定義的方法 'in_time_zone'」。爲了讓這個工作起作用,我需要哪些rails類? – 2010-04-23 02:59:19

+0

您正在使用哪個版本的Rails?它是否工作,如果你做Time.zone.now.in_time_zone(...)? – mckeed 2010-04-23 14:49:49

+0

非常感謝代碼示例。這清除了它(與弗雷德的評論一起)。我做了很多錯事,我甚至無法解釋:-) – 2010-04-23 19:20:28

3

嘗試的ActiveSupport的TimeWithZone對象manipul與TimeZone合作。 ActiveSupport還提供了用於將UTC時間轉換爲指定時區的時區的in_time_zone方法。 mckeed的答案顯示了代碼。

+0

將TimeWithZone導入我的課堂的語法是什麼?或者我默認使用Rails獲得它? – 2010-04-23 03:04:28

+1

我相信你默認會得到它。 mckeed有你需要的代碼,但你不會在irb中看到它。你需要在Rails中運行它。 – Fred 2010-04-23 04:32:56

+0

你是對的 - 謝謝,弗雷德 - 它默認有Rails。我抓着吸管,試圖讓它在irb中工作。 – 2010-04-23 19:21:43

0

我使用simple_form Rails中4,我剛添加的輸入字段作爲

<%= f.input :time_zone, :as => :time_zone %> 

與遷移

class AddTimeZoneColumnToTextmessage < ActiveRecord::Migration 
    def change 
    add_column :textmessages, :time_zone, :string 
    end 
end 
4

解釋根據請求時區一個好主意,如果Time.zone這是你想要的時區,那麼你可以使用@date.to_time.to_datetime

> @date 
=> Tue, 02 Sep 2014 23:59:59 +0000 
> @date.class 
=> DateTime 
> @date.to_time 
=> 2014-09-02 12:59:59 -1100 
> @date.to_time.to_datetime 
=> Tue, 02 Sep 2014 12:59:59 -1100 
+0

無法在Rails上工作5 ' Time.zone#=> Europe/Paris my_date#=> 2017年3月29日星期三19:00:20 +0200 my_date.to_time#=>「2017-03-29T17 :00:20。000 + 00:00「 my_date.to_time.to_datetime#=> 2017年3月29日星期三17:00:20 +0000 ' – 2017-03-21 10:36:45