2010-01-28 12 views
7

Ho installato Ruby-1.8.6-p383 con RVM. ruby System è 1.9.1_p378-1Data errata con rubino Date.today e DateTime.now

sto ottenendo la data sbagliata da Date.today e DateTime.now quando si utilizza Ruby 1.8 .. Mentre Time.now è corretto:

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 

Tutto va bene se posso passare a 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 

Qualche consiglio su come raggiungere DateTime per funzionare correttamente in ruby ​​1.8 sarebbe apprezzato!

+0

Ho installato rubino 1.8.7, che sta tornando la data corretta. – Rob

+0

sembra funzionare bene per me Ruby 1.8.6 p287 utilizza 1.8.6 un requisito per te? – Beanish

+0

Non ho bisogno di 1.8.6, funziona con 1.8.7 .. Quindi non ho bisogno di risolverlo .. È solo molto strano! Ho solo installato 1.8.6, perché questo è ciò che rvm fa automaticamente quando si esegue "rvm install 1.8" – Rob

risposta

3

Mi sono imbattuto in un problema simile e ho ottenuto 3 soluzioni diverse, che ho provato 2 ed entrambi hanno funzionato. Per saperne di più su di esso da qui:

http://www.ruby-forum.com/topic/210647

Jarmo

+0

Sì, penso che il problema che stavo avendo era dovuto alla compilazione con gcc 4.4. – Rob

1

La stringa restituita sembra essere molto rotta: i) l'anno è 2126, ii) ci sono due trattini tra l'anno e il mese, e ii) il giorno è 10618.

Quale piattaforma Are You On? Su quale fuso orario sei attivo (l'esempio implica che sei in GMT)?

Sono su WinXP e Ruby 1.8.6-p111 dà lo stesso risultato in tutti e tre i casi.

Modifica: ho fatto qualche ricerca nel codice sorgente di Ruby (Date e DateTime sono definiti in lib/date.rb).

Si scopre che Date.today chiamate internamente Time.now.__send__(:to_date)..., quindi forse si dovrebbe provare a chiamare Time.now.__send__(:to_date).to_s in irb e confrontare l'output a Time.now.to_s al fine di circoscrivere il problema.

Date.today chiama anche .new_start(...) sull'istanza creata Date, quindi forse questo è incasinare la data nel tuo caso.

+0

Sto usando su linux x86_64 .. Sono in GMT. – Rob

-1

Non sono sicuro che tu stia eseguendo localmente o sul server, ma penso che Ruby potrebbe prendere la data del server, che potrebbe essere in un fuso orario diverso da quello che sei, e quindi apparire in modo diverso.

Problemi correlati