Data errada com ruby date.today e DateTime.now
Pergunta
Eu instalei Ruby-1.8.6-P383 com RVM. O sistema rubi é 1.9.1_p378-1
Estou recebendo a data errada da data.Today e DateTime.Now ao usar o Ruby 1.8 .. enquanto o tempo.No está correto:
irb(main):002:0> DateTime.now.to_s
=> "2126--1-10618T11:23:43+00:00"
irb(main):004:0> Date.today.to_s
=> "2126--1-10618"
irb(main):005:0> Time.now
=> Thu Jan 28 11:55:27 +0000 2010
Tudo está bem se eu mudar para Ruby 1.9:
irb(main):003:0> DateTime.now.to_s
=> "2010-01-28T11:58:51+00:00"
irb(main):004:0> Date.today.to_s
=> "2010-01-28"
irb(main):005:0> Time.now
=> 2010-01-28 11:59:05 +0000
Qualquer conselho sobre como fazer com que o DateTime funcione corretamente no Ruby 1.8 seria mais apreciado!
Solução
Eu tropecei em problemas semelhantes e obtive três soluções diferentes, das quais tentei 2 e ambas funcionei. Leia mais sobre isso daqui:
http://www.ruby-forum.com/topic/210647
JARMO
Outras dicas
A corda retornada parece estar muito quebrada: i) o ano é 2126, ii) Há dois hífens entre o ano e o mês e ii) o dia é 10618.
Em que plataforma você está? Em que fuso horário você está (o exemplo implica que você está no GMT)?
Estou no WinXP e o Ruby 1.8.6-P111 fornece o mesmo resultado nos três casos.
EDIT: Eu fiz algumas cavadas no código -fonte do rubi (Date
e DateTime
são definidos em lib/date.rb
).
Acontece que Date.today
liga internamente Time.now.__send__(:to_date)...
, então talvez você deva tentar ligar Time.now.__send__(:to_date).to_s
dentro irb
e comparar a saída com Time.now.to_s
Para diminuir o problema.
Date.today
também liga .new_start(...)
no criado Date
Instância, então talvez isso esteja bagunçando a data do seu caso.
Não tenho certeza se você está executando as coisas localmente ou no servidor, mas acho que Ruby pode estar tomando a data do servidor, que pode estar em um fuso horário diferente do que você é e, portanto, aparece de maneira diferente.