Voici une façon, mais pouvez-vous penser à une façon plus idiomatique ?
>> Time.use_zone('Sydney'){ Time.zone.parse('2011-04-12 2pm') }
=> Tue, 12 Apr 2011 14:00:00 EST +10:00
Voici une façon, mais pouvez-vous penser à une façon plus idiomatique ?
>> Time.use_zone('Sydney'){ Time.zone.parse('2011-04-12 2pm') }
=> Tue, 12 Apr 2011 14:00:00 EST +10:00
Je pense que vous recherchez
Time.find_zone('Alaska').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 AKST -09:00
Time.find_zone('Amsterdam').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 CET +01:00
Time.find_zone('Sydney').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 EST +11:00
Time.find_zone('Wellington').local(2011,1,1)
=> Sat, 01 Jan 2011 00:00:00 NZDT +13:00
Cela fonctionne également avec parse
Time.find_zone('Sydney').parse('2011-04-12 2pm')
=> Tue, 12 Apr 2011 14:00:00 EST +10:00
Pour analyser une date dans un fuseau horaire spécifique, vous pouvez utiliser ActiveSupport::TimeZone
> ActiveSupport::TimeZone["Sydney"].parse("2011-04-12 2pm")
=> Tue, 12 Apr 2011 14:00:00 EST 10:00
La documentation de l'API TimeZone est disponible ici : http://api.rubyonrails.org/classes/ActiveSupport/TimeZone.html#method-c-5B-5D
Comme indiqué ci-dessus, pour créer une heure dans un fuseau horaire spécifique (par exemple, 4/10/2014 13:30 New York) :
@event.start_time = Time.find_zone('Eastern Time (US & Canada)').local(2014,4,10,13,30)
=> Thu, 10 Apr 2014 13:30:00 EDT -04:00
@event.start_time.utc
=> 2014-04-10 17:30:00 UTC
Lorsqu'il est enregistré dans votre base de données, il sera converti en UTC (dans Postgres au moins si vous utilisez un type de timestamp dans votre migration), et lors d'un accès ultérieur, il sera affiché par rapport au fuseau horaire de l'application défini dans config/application.rb.
Pour afficher correctement l'heure locale, nous stockons également le nom du fuseau horaire (par exemple, "Eastern Time (US & Canada)") dans notre base de données. Ainsi, lorsque nous voulons imprimer l'heure dans nos vues, nous...
@event.start_time.in_time_zone(@event.timezone)
=> Thu, 10 Apr 2014 13:30:00 EDT -04:00
Pour obtenir le fuseau horaire abrégé (par exemple, EST)
@event.start_time.in_time_zone(@event.timezone).zone
=> "EDT"
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.