[ruby-on-rails] Rails 3에서 UTC를 현지 시간으로 변환

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

UTC의 moment일부 Time변수 (예 🙂 가 있습니다 moment = Time.now.utc. momentDST (예 : EST / EDT 사용)를 처리하면서 내 시간대 로 어떻게 변환 합니까?

보다 정확하게는 시간이 오늘 아침 오전 9시 EDT에 해당하는 경우 “3 월 14 일 월요일 오전 9시”를 인쇄하고 시간이 지난 월요일 오전 9시 EST 인 경우 “3 월 7 일 월요일 오전 9시”를 인쇄하고 싶습니다.

바라건대 다른 방법이 있습니까?

편집 : 처음 에는 “EDT”가 인식 된 시간대 여야한다고 생각 했지만 “EDT”는 실제 시간대가 아니라 시간대의 상태와 비슷합니다. 예를 들어을 요청하는 것은 의미가 없습니다 Time.utc(2011,1,1).in_time_zone("EDT"). “EST” 일광 절약 시간을 사용하지 않고 1 년 동안 (UTC-5) 사용되는 실제 시간대이므로 약간 혼란 스럽습니다 .



답변

Rails에는 자체 이름이 있습니다. 다음과 같이 참조하십시오.

rake time:zones:us

rake time:zones:all모든 시간대에 대해 실행할 수도 있습니다. 더 많은 영역 관련 레이크 작업을 보려면 :rake -D time

따라서 EST로 변환하려면 DST를 자동으로 충족해야합니다.

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


답변

Time#localtime 코드를 실행하는 머신의 현재 시간대의 시간을 제공합니다.

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

업데이트 : 자신의 시간대가 아닌 특정 시간대로 수렴하고 싶다면 올바른 길을 가고있는 것입니다. 그러나 EST와 EDT에 대해 걱정하는 대신 일반적인 동부 표준시를 통과하면됩니다. 날짜를 기준으로 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 


답변

시스템 로컬 영역을 사용하여 쉽게 구성 할 수 있습니다. 그냥 application.rb에 추가하십시오.

config.time_zone = Time.now.zone

그런 다음 레일은 현지 시간으로 타임 스탬프를 표시하거나이 지침과 같은 것을 사용하여 현지 시간을 가져올 수 있습니다.

Post.created_at.localtime


답변

실제로라는 멋진 보석이 있습니다. local_time 클라이언트 측에서만 모든 작업을 수행하도록 basecamp에서 한 .

https://github.com/basecamp/local_time


답변

이유를 모르지만 제 경우에는 이전에 제안한 방식으로 작동하지 않습니다. 그러나 다음과 같이 작동합니다.

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

물론 offset가치를 자신의 것으로 바꿔야 합니다.


답변

사용자의 시간대를 얻기 위해 실제로 수행하는 경우에는 시간대를 변경하기 만하면됩니다 config/applications.rb.

이렇게 :

Rails는 기본적으로 현재 시간대를 지정하더라도 UTC로 시간 기록을 저장합니다.

config.time_zone = "Singapore"

그래서 이것이 당신이해야 할 전부이고 당신은 갈 수 있습니다.


답변