[ruby] Ruby에서 DateTime.now를 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없이).
답변
불행히도 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 오프셋으로 변환됩니다.
답변
이것을 시도해보십시오. Ruby에서 작동합니다.
DateTime.now.to_time.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"
답변
irb에서 :
>>d = DateTime.now
=> #<DateTime: 11783702280454271/4800000000,5/12,2299161>
>> "#{d.hour.to_i - d.zone.to_i}:#{d.min}:#{d.sec}"
=> "11:16:41"
시간을 utc로 변환합니다. 그러나 게시 된대로 시간 만 사용하면 다음을 사용할 수 있습니다.
Time.now.utc
바로 가져 오세요.
답변
DateTime의 문자열 표현은 Time 클래스에서 구문 분석 할 수 있습니다.
> Time.parse(DateTime.now.to_s).utc
=> 2015-10-06 14:53:51 UTC