복붙노트

[RUBY-ON-RAILS] 레일에 한 시간대에서 다른 시간대로 시간을 변환

RUBY-ON-RAILS

레일에 한 시간대에서 다른 시간대로 시간을 변환

내 created_at 타임 스탬프는 UTC에 저장됩니다

>> Annotation.last.created_at
=> Sat, 29 Aug 2009 23:30:09 UTC +00:00

어떻게 (계정 일광 절약 고려) 나는 '동부 표준시 (미국과 캐나다)'에 그 중 하나를 변환합니까? 뭔가 같은 :

Annotation.last.created_at.in_eastern_time

해결법

  1. ==============================

    1.날짜 시간 클래스의 in_time_zone 방법을 사용

    날짜 시간 클래스의 in_time_zone 방법을 사용

    Loading development environment (Rails 2.3.2)
    >> now = DateTime.now.utc
    => Sun, 06 Sep 2009 22:27:45 +0000
    >> now.in_time_zone('Eastern Time (US & Canada)')
    => Sun, 06 Sep 2009 18:27:45 EDT -04:00
    >> quit
    

    특정 그래서 예를 들면

    Annotation.last.created_at.in_time_zone('Eastern Time (US & Canada)')
    
  2. ==============================

    2.이 오래된 질문이지만, 뭔가를 언급 할 가치가있다. 이전 응답에서는 일시적으로 시간대를 설정하는 before_filter를 사용하도록 제안합니다.

    이 오래된 질문이지만, 뭔가를 언급 할 가치가있다. 이전 응답에서는 일시적으로 시간대를 설정하는 before_filter를 사용하도록 제안합니다.

    당신은 이제까지 Time.zone 스레드의 정보를 저장하기 때문에 그렇게해서는 안됩니다, 그것은 아마 스레드에 의해 처리 다음 요청에 누출됩니다.

    대신 요청이 완료된 후 Time.zone 리셋 있는지 확인하기 위해 around_filter을 사용해야합니다. 뭔가 같은 :

    around_filter :set_time_zone
    
    private
    
    def set_time_zone
      old_time_zone = Time.zone
      Time.zone = current_user.time_zone if logged_in?
      yield
    ensure
      Time.zone = old_time_zone
    end
    

    여기에 대해 자세히 알아보기

  3. ==============================

    3.당신은 당신의 /config/application.rb이를 추가하는 경우

    당신은 당신의 /config/application.rb이를 추가하는 경우

    config.time_zone = 'Eastern Time (US & Canada)'
    

    그럼 당신은 셀 수

    Annotation.last.created_at.in_time_zone
    

    지정된 시간대의 시간을 얻을 수 있습니다.

  4. ==============================

    4.당신은 당신의 /config/application.rb를 구성하는 경우

    당신은 당신의 /config/application.rb를 구성하는 경우

    config.time_zone = 'Eastern Time (US & Canada)'
    
    Time.now.in_time_zone
    
    DateTime.now.in_time_zone
    
  5. ==============================

    5.동부 시간으로 시간대를 설정합니다.

    동부 시간으로 시간대를 설정합니다.

    당신은 시간대에 설정 / environment.rb에 기본을 설정할 수 있습니다

    config.time_zone = "Eastern Time (US & Canada)"
    

    이제 당겨 모든 기록은 그 시간대에있을 것입니다. 서로 다른 시간대를해야하는 경우 컨트롤러에 before_filter으로 변경할 수있는 사용자의 시간대에 따라 말.

    class ApplicationController < ActionController::Base
    
      before_filter :set_timezone
    
      def set_timezone
        Time.zone = current_user.time_zone
      end
    end
    

    그냥 당신이 UTC로 데이터베이스에 모든 시간을 저장하고 확인하고 모든 달콤한 될 것입니다.

  6. from https://stackoverflow.com/questions/1386871/convert-time-from-one-time-zone-to-another-in-rails by cc-by-sa and MIT license