2010-11-24 10 views

Respuesta

39

Se podía añadir el nombre de zona horaria UTC a la cadena antes de analizarlo:

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 
+0

Doh! De hecho, lo intenté y malinterpreté el resultado. Mi error. Gracias. – farhadf

+5

No funciona en mi caso. 's =" Viernes 3 de diciembre, 17:05:41 2010 UTC "' se analizará como hora local e ignorará el 'UTC 'posterior – Oktav

+6

No puede ser la mejor solución de caso general – Ramfjord

15

Si su uso de raíles se pueden utilizar las ActiveSupport::TimeZone ayudantes

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 

Está diseñado para tener la zona horaria establecido al comienzo de la solicitud según la zona horaria del usuario.

Todo tiene que tener Time.zone en él, por lo que Time.parse todavía analizará como la zona horaria de los servidores.

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

Nota: el formato de hora que tiene por encima ya no estaba trabajando, por lo que cambió a un formato que es compatible.

+31

Si no desea cambiar todo el contexto Time.zone, use ActiveSupport :: TimeZone.new ('UTC'). Parse – Jerph

+1

@Jerph, su respuesta es definitivamente la mejor –

+0

Respondí una pregunta similar aquí: http: //stackoverflow.com/a/36144567/629356 – ifightcrime

2

Un Aliter a la respuesta de @Pete Brumm sin equipo de Time.zone/desarmar

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

no se recomienda ya que ignora DST – Kuf

Cuestiones relacionadas