Странное поведение Руби в преобразовании DateTime в Time
Моя цель - получить экземпляр Time из экземпляра DateTime
Это уже обсуждалось здесь, и я все еще в замешательстве: конвертировать в / из DateTime и Time в Ruby
Для меня в irb работает ruby 1.9.3p0 (2011-10-30 ревизия 33570) [x86_64-darwin11.2.0], все работает отлично
1.9.3p0 :001 > require 'Date'
=> true
1.9.3p0 :002 > require 'Time'
=> true
1.9.3p0 :003 > t=DateTime.now
=> #<DateTime: 2012-07-01T01:57:32+05:30 ((2456109j,73652s,621060000n),+19800s,2299161j)>
1.9.3p0 :004 > t2=t.to_time
=> 2012-07-01 01:57:32 +0530
1.9.3p0 :005 > t.class
=> DateTime
1.9.3p0 :006 > t2.class
=> Time
1.9.3p0 :007 >
Однако при работе с rails console v 3.2.3 на той же платформе ruby
1.9.3p0 :001 > t=DateTime.now
=> Sun, 01 Jul 2012 02:00:00 +0530
1.9.3p0 :002 > t.class
=> DateTime
1.9.3p0 :003 > t2=t.to_time
=> Sun, 01 Jul 2012 02:00:00 +0530
1.9.3p0 > t2.class
=> DateTime
Что делать, чтобы получить экземпляр Time из DateTime в рельсах?
1 ответ
Решение
Согласно документации Rails для DateTime.to_time()
,
Если self имеет смещение, отличное от 0, self будет возвращено без изменений
Чтобы изменить смещение на 0, используйте DateTime.utc()
,
1.9.3p194 :005 > t3=t2.utc
=> Sat, 30 Jun 2012 20:43:21 +0000
1.9.3p194 :006 > t3.offset
=> (0/1)
1.9.3p194 :007 > t4=t3.to_time
=> 2012-06-30 20:43:21 UTC
1.9.3p194 :008 > t4.class
=> Time