Rails 3에서 UTC Time
또는 TimeWithZone
현지 시간으로 변환하는 데 문제가 있습니다.
UTC의 moment
일부 Time
변수 (예 🙂 가 있습니다 moment = Time.now.utc
. moment
DST (예 : 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에서 한 .
답변
이유를 모르지만 제 경우에는 이전에 제안한 방식으로 작동하지 않습니다. 그러나 다음과 같이 작동합니다.
Time.now.change(offset: "-3000")
물론 offset
가치를 자신의 것으로 바꿔야 합니다.
답변
사용자의 시간대를 얻기 위해 실제로 수행하는 경우에는 시간대를 변경하기 만하면됩니다 config/applications.rb
.
이렇게 :
Rails는 기본적으로 현재 시간대를 지정하더라도 UTC로 시간 기록을 저장합니다.
config.time_zone = "Singapore"
그래서 이것이 당신이해야 할 전부이고 당신은 갈 수 있습니다.
답변
