Question

Je suis refactorisation du code pour une bibliothèque Ruby. Ce code comprend un analyseur de date. L'un des tests était d'analyser cette chaîne "2008-02-20T8: 05: 00-010: 00" qui est censé être ISO 8601 .

Le code précédent REELLEMENT sortie: "Mer 20 février 18:05:00 UTC 2008". Mon nouveau code sorties:. "Mer 20 février 16:05:00 UTC 2008"

Ma question est: quel est le droit d'un

?

Time.parse en Ruby donne la seconde. Mais encore une fois, je veux être sûr à 100% que le code précédent et de test ont été buggy.

Laquelle est la bonne? (Peut-être par analyse de la chaîne avec une bibliothèque dans une autre langue -. Je ne sais Ruby)

Était-ce utile?

La solution

Le temps UTC est correct 1805. Le groupe indique le temps 0805 dans la zone -10, pour ainsi obtenir UTC ajouter 10 au moment donné. Ainsi 1805. Depuis 1805 est inférieur à 2400, il est le même jour.

Si votre code donne 1605, alors vous presque certainement le fuseau horaire mal réglé à la zone -8, qui se trouve être, heure du Pacifique.


Aha, ressemble à votre format d'entrée est foiré. Observer:

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

Je suis d'être dans la zone -7 il est convenant que ma locale. Mais

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

Je reçois un résultat inattendu. Maintenant, observez:

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

Il y a attendu résultat. Regarde la différence? Premier exemple vs seconde:

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")

Je pris la fausse supplémentaire 0 out (qui I n'a certainement pas remarqué non plus) et vlan, cela fonctionne.

Autres conseils

Je sais que c'est assez vieux, mais je suis tombé sur elle.

Je parie que quelque chose quelque part interprète 010 comme octal numéro avec la valeur 8. Peut-être qu'il ya un bogue dans la mise en œuvre de Time.parse()?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top