2010-04-23 2 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

을 사용할 수 있습니다, 나는 "정의되지 않은 메서드 'in_time_zone'의"오류가 발생합니다. 레일스 클래스가 작동하려면이 클래스가 필요합니까? –

+0

어떤 레일 버전을 사용하고 있습니까? Time.zone.now.in_time_zone (...)을 수행하면 작동합니까? – mckeed

+0

코드 샘플을 보내 주셔서 감사합니다. 그것은 Fred의 코멘트와 함께 그것을 정리했다. 나는 많은 것들을 잘못하고 있었고, 설명하기조차 할 수 없다 :-) –

3

을 ActiveSupport의 TimeWithZone 객체를 시도 manipul TimeZone과 ated. 또한 ActiveSupport는 UTC 시간을 지정된 TimeZone 시간대로 변환하는 in_time_zone 메소드를 제공합니다. mckeed의 대답은 코드를 보여줍니다.

+0

수업 시간에 TimeWithZone을 가져 오는 구문은 무엇입니까? 아니면 Rails에서 기본적으로 가져올 수 있습니까? –

+1

나는 당신이 기본적으로 그것을 얻는다고 믿는다. mckeed에는 필요한 코드가 있지만 irb에서는 볼 수 없습니다. Rails에서 실행해야합니다. – Fred

+0

네가 맞아 - 고마워, 프레드 - 레일즈는 기본적으로 제공된다. 나는 빨대를 움켜 잡고 그것을 irb에서 작동 시키려고 노력했다. –

0

나는 레일 4 simple_form을 사용하고 난 그냥 마이그레이션와

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

로 입력 필드를 추가

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

에서 설명 config.time_zone

자세한 내용에 설정된 기본 시간대를 무시 요청별로 시간대에 대한 Time.use_zone을 사용하는 것이 좋습니다 수 있습니다 Time.zone 경우 그 다음 원하는 시간대의 당신 내가 Time.now.in_time_zone ('CST')을하려고 할 때 IRB에서 @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

레일 5에서 작동하지 않습니다 Time.zone # => 유럽/파리 my_date # => Wed, 29 3 월 201 19:00:20 +0200 my_date.to_time # => "2017-03-29T17 : 00 : 20.000 + 00 : 00 " my_date.to_time.to_datetime # => Wed, 29 Mar 2017 17:00:20 +0000 ' –

관련 문제