가있는 경우 d = DateTime.now
'd'를 UTC (적절한 날짜 포함)로 어떻게 변환합니까?
가있는 경우 d = DateTime.now
'd'를 UTC (적절한 날짜 포함)로 어떻게 변환합니까?
답변:
d = DateTime.now.utc
이런!
그것은 Rails에서 작동하는 것처럼 보이지만 바닐라 루비는 아닙니다 (물론 질문이 요구하는 것입니다)
d = Time.now.utc
그러나 작동합니다.
사용해야하는 이유가 DateTime
되지는 Time
? Time
필요한 모든 것을 포함해야합니다.
irb(main):016:0> Time.now
=> Thu Apr 16 12:40:44 +0100 2009
DateTime.now.new_offset(0)
표준 Ruby에서 작동합니다 (즉, ActiveSupport없이).
new_offset
메소드 인수의 기본값은 0
이미입니다. 그래서 DateTime.now.new_offset
또한 사용될 수 있습니다.
불행히도 DateTime 클래스에는 Time 클래스에서이 작업을 수행 할 수있는 편리한 메서드가 없습니다. 다음과 같이 DateTime 객체를 UTC로 변환 할 수 있습니다.
d = DateTime.now
d.new_offset(Rational(0, 24))
다음을 사용하여 UTC에서 현지 시간으로 다시 전환 할 수 있습니다.
d.new_offset(DateTime.now.offset)
d
UTC 시간의 DateTime 객체는 어디에 있습니까 ? 이것을 편리한 방법으로 원한다면 다음과 같이 만들 수 있습니다.
class DateTime
def localtime
new_offset(DateTime.now.offset)
end
def utc
new_offset(Rational(0, 24))
end
end
다음 irb 세션에서이를 확인할 수 있습니다.
d = DateTime.now.new_offset(Rational(-4, 24))
=> #<DateTime: 106105391484260677/43200000000,-1/6,2299161>
1.8.7 :185 > d.to_s
=> "2012-08-03T15:42:48-04:00"
1.8.7 :186 > d.localtime.to_s
=> "2012-08-03T12:42:48-07:00"
1.8.7 :187 > d.utc.to_s
=> "2012-08-03T19:42:48+00:00"
위에서 볼 수 있듯이 초기 DateTime 개체에는 -04 : 00 오프셋 (동부 표준시)이 있습니다. 나는 -07 : 00 오프셋으로 태평양 표준시에 있습니다. localtime
앞에서 설명한대로 호출 하면 DateTime 개체가 현지 시간으로 올바르게 변환됩니다. utc
개체를 호출 하면 올바르게 UTC 오프셋으로 변환됩니다.
당신이 원하는 경우에 당신은 ENV를 설정할 수 있습니다 Time.now
및 DateTime.now
UTC 시간에 응답 할 수 있습니다.
require 'date'
Time.now #=> 2015-11-30 11:37:14 -0800
DateTime.now.to_s #=> "2015-11-30T11:37:25-08:00"
ENV['TZ'] = 'UTC'
Time.now #=> 2015-11-30 19:37:38 +0000
DateTime.now.to_s #=> "2015-11-30T19:37:36+00:00"