data sbagliata con il rubino Date.today e DateTime.now
Domanda
Ho installato ruby-1.8.6-P383 con RVM. Sistema rubino è 1.9.1_p378-1
Ricevo 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 passo al rubino 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!
Soluzione
sono incappato problema simile e ottenuto 3 diverse soluzioni, che ho provato 2 ed entrambi lavorato. Per saperne di più su di esso da qui:
http://www.ruby-forum.com/topic/210647
Jarmo
Altri suggerimenti
La stringa restituita sembra essere molto rotto:. I) l'anno è 2126, ii) ci sono due trattini tra l'anno e il mese, e ii) il giorno è 10618
Quale piattaforma stai? Quali fuso orario sei sul (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.
Edit: ho fatto qualche scavo nel codice sorgente di Ruby (Date
e DateTime
sono definiti in lib/date.rb
).
Si scopre che Date.today
chiama 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
invita inoltre .new_start(...)
nell'istanza Date
creato quindi forse è rovinare la data nel vostro caso.
Non sono sicuro se si esegue le cose a livello locale, o sul server, ma penso rubino potrebbe essere prendendo la data del server, che può essere in un fuso orario diverso di quello che sono, e, quindi, appaiono in modo diverso.