[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)

dUTC 시간의 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.nowDateTime.nowUTC 시간에 응답 할 수 있습니다.

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