2010-10-28 39 views
31

Tengo una cadena como esta:Convertir DateTime cadena a la hora UTC en los carriles

"2010-01-01 12:30:00" 

que necesito para convertir a UTC de la zona horaria local actual.

Intenté esto, pero parece pensar que la cadena ya es UTC.

"2010-01-01 12:30:00".to_datetime.in_time_zone("Central Time (US & Canada)") 
=> Fri, 01 Jan 2010 06:30:00 CST -06:00 

No estoy seguro de dónde ir desde aquí.

añade esto desde mi comentario:

>> Time.zone = "Pacific Time (US & Canada)" 
=> "Pacific Time (US & Canada)" 
>> Time.parse("2010-10-27 00:00:00").getutc 
=> Wed Oct 27 06:00:00 UTC 2010 
>> Time.zone = "Mountain Time (US & Canada)" 
=> "Mountain Time (US & Canada)" 
>> Time.parse("2010-10-27 00:00:00").getutc 
=> Wed Oct 27 06:00:00 UTC 2010 

Gracias por cualquier ayuda.

Respuesta

50
Time.parse("2010-01-01 12:30:00").getutc 

EDITAR

(rechinar los dientes, pensando en la pesadilla que es la fecha de Ruby/Rails/manejo del tiempo)

bien, ¿qué tal esto:

Time.zone.parse("2010-01-01 12:30:00").utc 

Nota que Time.zone.parse devuelve DateTime, mientras que anexar .utc le da Time. Hay diferencias, así que ten cuidado.

Además, Time.zone es parte de Rails (ActiveSupport), no Ruby. Solo para que sepas.

+0

funcionó genial! ¡Gracias! –

+0

tal vez hablé demasiado pronto. No cambia la hora en función de config.time_zone. Agregaré algún código arriba para referencia. –

+1

Ver mi edición. (Se agregaron caracteres extra para SO para permitir la publicación de este comentario. Blah blah, soy la morsa Etc, etc.) – zetetic

5

En carriles 4 y por encima de directamente CAN use in_time_zone

"2010-01-01 12:30:00".in_time_zone 
#=> Fri, 01 Jan 2010 12:30:00 EST -05:00 

"2010-01-01 12:30:00".in_time_zone.utc 
#=> 2010-01-01 17:30:00 UTC 
+0

No agrega mucho más al contexto de la pregunta, pero esto también es posible 'timestamp.in_time_zone ('UTC')', y luego 'timestamp.in_time_zone ('Europe/Athens')' –

Cuestiones relacionadas