3 문자 약어 형식을 사용하여 시간대를 반환하는 여러 위치에 대한 현재 시간 정보를 반환하는 서비스가 있습니다. 예 : EST
, , EDT
등입니다. 그러나 어떤 ActiveSupport가 EDT
변형을 알고있는 것처럼 보이지만이를 분석 할 수없는 것 같습니다. 예 :DST의 시간대 약어 구문 분석
시간대의 전체 이름은
Time.new(2017, 12, 1).in_time_zone('Eastern Time (US & Canada)')
=> Fri, 01 Dec 2017 00:00:00 EST -05:00
Time.new(2017, 12, 1).in_time_zone('Eastern Time (US & Canada)').zone
=> "EST"
Time.new(2017, 10, 1).in_time_zone('Eastern Time (US & Canada)')
=> Sun, 01 Oct 2017 00:00:00 EDT -04:00
Time.new(2017, 10, 1).in_time_zone('Eastern Time (US & Canada)').zone
=> "EDT"
그러나 날짜에 따라 EST
또는 EDT
로 변환됩니다 DST 변형의 약어 식별 할 수없는 역 :
Time.new(2017, 12, 1).in_time_zone('EST').zone
=> "EST"
Time.new(2017, 12, 1).in_time_zone('EST')
=> Fri, 01 Dec 2017 00:00:00 EST -05:00
Time.new(2017, 10, 1).in_time_zone('EDT')
ArgumentError: Invalid Timezone: EDT
from /home/erich/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/activesupport-4.2.10/lib/active_support/core_ext/time/zones.rb:72:in `rescue in find_zone!'
전체 이름을 그것이 날짜에 따라 DST의 상태를 올바르게 식별하기 때문에 내 경우에는 괜찮을 것입니다. 따라서 긴 형식을 파생 할 수 있다면 일년 중 언제든지 사용할 수 있습니다.
some_method('EST')
=> "Eastern Time (US & Canada)"
some_method('EDT')
=> "Eastern Time (US & Canada)"
하지 않으면, 내가 xDT
형태를 해결할 수있는 다른 방법이 : 같은 그 매핑을 제공 할 것입니다 레일 (4)에서 제공하는 방법이 있습니까?
여기 혼동이 있습니다. EST와 EDT는 영역이 아니며 오프셋입니다. "동부 표준시 (미국 및 캐나다)"는 존입니다. 존에서 사용할 수있는 3 체이서 오프셋을 얻는 방법을 잘 모르겠습니다 만, 그것이 당신이 찾고있는 것입니다. – Anthony
일대일 매핑이 아닙니다. 예를 들어 '동부 표준시 (미국과 캐나다)'와 '인디애나 (동부 표준시)'는 약어가 'EST'/ 'EDT'입니다. – Stefan
@Anthony 필자는 분명히 틀릴 수도 있지만 "오프셋"이라고하는 비 숫자 값을 본 적이 없습니다. 그럴 경우 Activesupport의 혼란이 깊어집니다. '.zone'은 예를 들어 ''EST'' (동부 표준시),'gmt_offset','utc_offset','formatted_offset'이 리턴합니다 ... 잘, 오프셋. ;) – erich2k8