К сожалению, класс DateTime не имеет удобных методов, доступных в классе Time для этого. Вы можете преобразовать любой объект DateTime в UTC следующим образом:
d = DateTime.now
d.new_offset(Rational(0, 24))
Вы можете переключиться обратно с UTC на местное время, используя:
d.new_offset(DateTime.now.offset)
, где d
- это объект DateTime по времени UTC. Если вы хотите использовать их как удобные методы, вы можете создать их следующим образом:
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.