web-dev-qa-db-fra.com

Comment puis-je obtenir Ruby pour analyser l'heure comme si elle était dans un fuseau horaire différent?

J'analyse quelque chose comme ça:

11/23/10 23:29:57

qui n'a pas de fuseau horaire associé, mais je sais que c'est dans le fuseau horaire UTC (alors que je ne le suis pas). Comment puis-je obtenir Ruby pour analyser cela comme s'il était dans le fuseau horaire UTC?

41
farhadf

Vous pouvez simplement ajouter le nom du fuseau horaire UTC à la chaîne avant de l'analyser:

require 'time'
s = "11/23/10 23:29:57"
Time.parse(s) # => Tue Nov 23 23:29:57 -0800 2010
s += " UTC"
Time.parse(s) # => Tue Nov 23 23:29:57 UTC 2010
41
maerics

Si vous utilisez Rails vous pouvez utiliser le ActiveSupport::TimeZone aides

current_timezone = Time.zone
Time.zone = "UTC"
Time.zone.parse("Tue Nov 23 23:29:57 2010") # => Tue, 23 Nov 2010 23:29:57 UTC +00:00
Time.zone = current_timezone

Il est conçu pour que le fuseau horaire soit défini au début de la demande en fonction du fuseau horaire de l'utilisateur.

Tout doit avoir Time.zone dessus, donc Time.parse analyserait toujours le fuseau horaire du serveur.

http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html

Remarque: le format d'heure que vous avez ci-dessus ne fonctionnait plus, j'ai donc changé pour un format pris en charge.

21
Pete Brumm

Une légende à la réponse de @Pete Brumm sans Time.zone set/unset

Time.zone.parse("Tue Nov 23 23:29:57 2010") + Time.zone.utc_offset
4
Vignesh Jayavel

Si vous utilisez ActiveSupport [de Rails, par exemple], vous pouvez le faire:

ActiveSupport::TimeZone["GMT"].parse("..... date string")
4
Bret Weinraub