Domanda

Sto refactoring del codice per una libreria Ruby.Questo codice include un parser di data.Uno dei test è stato analizzare questa stringa "2008-02-20T8:05:00-010:00" che dovrebbe essere ISO8601.

Il codice precedente in realtà restituirebbe:"Mercoledì 20 febbraio 18:05:00 UTC 2008" .Il mio nuovo codice restituisce che:"Mercoledì 20 febbraio 16:05:00 UTC 2008" .

La mia domanda è:qual è quello giusto?

Time.parse in Ruby dà il secondo.Ma ancora una volta, voglio essere sicuro al 100% che il codice E il test precedenti fossero difettosi.

Qual è quello giusto?(Magari analizzando la stringa con una libreria in un'altra lingua?- Conosco solo Ruby.)

È stato utile?

Soluzione

L'ora UTC corretta è 1805.Il gruppo orario indica 0805 nella zona -10, quindi per ottenere UTC aggiungere 10 all'ora specificata.Così 1805.Poiché il 1805 è inferiore al 2400 è lo stesso giorno.

Se il tuo codice indica 1605, quasi sicuramente hai il fuso orario impostato in modo errato su zona -8, che sembra essere l'ora standard del Pacifico.


Aha, sembra che il tuo formato di input sia incasinato.Osservare:

irb(main):003:0> Time.parse("2008-02-20T8:05:00-010:00") 
=> Wed Feb 20 08:05:00 -0700 2008

Mi trovo nella zona -7 quindi è adatto al mio locale.Ma

irb(main):004:0> t=Time.parse("2008-02-20T8:05:00-010:00")
=> Wed Feb 20 08:05:00 -0700 2008
irb(main):005:0> t
=> Wed Feb 20 08:05:00 -0700 2008
irb(main):006:0> t.getutc
=> Wed Feb 20 15:05:00 UTC 2008

Sto ottenendo un risultato inaspettato.Ora osserva:

irb(main):007:0> t=Time.parse("2008-02-20T8:05:00-10:00")
=> Wed Feb 20 11:05:00 -0700 2008
irb(main):008:0> t.getutc
=> Wed Feb 20 18:05:00 UTC 2008

C'è il previsto risultato.Vedi la differenza?Primo esempio vs secondo:

irb(main):004:0> t=Time.parse("2008-02-20T8:05:00-010:00")
irb(main):007:0> t=Time.parse("2008-02-20T8:05:00-10:00")

Ho tolto lo 0 extra spurio (che IO di certo non me ne sono accorto neanche io) e whoosh, funziona.

Altri suggerimenti

So che è piuttosto vecchio, ma ci sono appena passato davanti.

Scommetto che qualcosa da qualche parte sta interpretando 010 come un ottale numero con il valore 8.Forse è un bug nell'implementazione di Time.parse()?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top