복붙노트

[RUBY-ON-RAILS] 레일에서 현지 시간으로 UTC로 변환 3

RUBY-ON-RAILS

레일에서 현지 시간으로 UTC로 변환 3

나는 레일 3에서 현지 시간으로 UTC 시간 또는 TimeWithZone을 변환하는 데 문제가 있습니다.

말의 순간 UTC에서 시간 변수 (예를 들어, 순간 = Time.now.utc)입니다. 방법 (즉, EST / EDT를 사용) 내가 DST를 돌보는, 내 시간대에 순간을 변환합니까?

더 정확하게, 나는 "월요일 3 월 14 일 오전 9"인쇄 출력하고 싶은 경우 시간 동부 표준시 오전 9시 지난 월요일 인 경우 아침 동부 서머 타임 오전 9시와 "월요일 3 월 7 일 오전 9시"에 시간 해당합니다.

바라건대 다른 방법이?

편집 : 내가 먼저 인정 시간대되어야한다 "EDT"를 생각했지만, "EDT는"더 많은 시간대의 상태처럼, 실제 시간대 없습니다. 예를 들어이 Time.utc (2011,1,1) .in_time_zone ( "EDT")을 요청 이해가되지 않습니다. "EST는"일광 절약 시간을 사용하고 있습니다하지 않는 몇 군데 (UTC-5) 일 년간에 사용되는 실제 시간대, 같이 그것은 혼란 조금이다.

해결법

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

    1.레일은 자신의 이름을 가지고있다. 그들과 함께보기 :

    레일은 자신의 이름을 가지고있다. 그들과 함께보기 :

    rake time:zones:us
    

    존 : 당신은 또한 레이크 시간을 실행할 수있는 모든 시간대의 모든합니다. 더 영역 관련 레이크 작업을 참조하십시오 : 레이크 -D 시간을

    그래서, 자동으로 DST 음식을 장만, EST로 변환 :

    Time.now.in_time_zone("Eastern Time (US & Canada)")
    
  2. ==============================

    2.시간 #에서의 현지 당신에게 코드를 실행하는 시스템의 현재 시간대의 시간을 줄 것이다 :

    시간 #에서의 현지 당신에게 코드를 실행하는 시스템의 현재 시간대의 시간을 줄 것이다 :

    > moment = Time.now.utc
      => 2011-03-14 15:15:58 UTC 
    > moment.localtime
      => 2011-03-14 08:15:58 -0700 
    

    업데이트 : 특정 시간대가 아닌 자신의 시간대에 Conver 유럽하려는 경우, 올바른 방향으로 가고있는 것입니다. 대신 EDT 대 EST에 대한 걱정으로하지만, 그냥 일반적인 동부 시간대에 통과 - 그것은 EDT 또는 EST인지 일을 기준으로 알 수 :

    > Time.now.utc.in_time_zone("Eastern Time (US & Canada)")
      => Mon, 14 Mar 2011 11:21:05 EDT -04:00 
    > (Time.now.utc + 10.months).in_time_zone("Eastern Time (US & Canada)")
      => Sat, 14 Jan 2012 10:21:18 EST -05:00 
    
  3. ==============================

    3.보석은 클라이언트 측에서이 모든 것을 할베이스 캠프로 LOCAL_TIME라는 좋은 실제로있다, 저는 믿습니다 :

    보석은 클라이언트 측에서이 모든 것을 할베이스 캠프로 LOCAL_TIME라는 좋은 실제로있다, 저는 믿습니다 :

    https://github.com/basecamp/local_time

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

    4.그것은 시스템에 로컬 영역을 사용하여 쉽게 구성 할 수있다, 당신의 application.rb이 추가 단지에

    그것은 시스템에 로컬 영역을 사용하여 쉽게 구성 할 수있다, 당신의 application.rb이 추가 단지에

    config.time_zone = Time.now.zone
    

    그런 다음, 레일은 당신이 당신의 현지에서 타임 스탬프를 표시해야하거나의 현지을 얻기 위해이 명령 같은 것을 사용할 수 있습니다

    Post.created_at.localtime
    
  5. ==============================

    5.이유를 알고하지 않습니다하지만 내 경우에이 방법은 이전 제안 작동하지 않습니다. 그러나 다음과 같이 작동합니다 :

    이유를 알고하지 않습니다하지만 내 경우에이 방법은 이전 제안 작동하지 않습니다. 그러나 다음과 같이 작동합니다 :

    Time.now.change(offset: "-3000")
    

    물론 당신은 당신에 오프셋 값을 변경해야합니다.

  6. ==============================

    6.당신이 사용자의 시간대를 얻으려면해서 실제로 그 일을하는 경우 다음 당신이 할 일은 당신을 설정 / applications.rb 시간대를 변경할 수 있습니다.

    당신이 사용자의 시간대를 얻으려면해서 실제로 그 일을하는 경우 다음 당신이 할 일은 당신을 설정 / applications.rb 시간대를 변경할 수 있습니다.

    이 같이 :

    현재 시간대를 지정하는 경우에도 레일은 기본적으로 UTC에서 시간 기록을 저장합니다.

    config.time_zone = "Singapore"
    

    이 모든 것입니다 그래서 당신은해야하고 넌 좋은 이동합니다.

  7. from https://stackoverflow.com/questions/5300493/convert-utc-to-local-time-in-rails-3 by cc-by-sa and MIT license