que estaba "strptiming" esta cadena:
19/05/2014 8:13:26 a.m.
Una marca de tiempo local, que es en mi caso es Auckland NZ sin un sello zona horaria en la cadena, como puede verse.
Lo mejor que puedo decir Time.strptime
usa la zona horaria del servidor como base.
En mi situación, y la buena práctica general, mis servidores funcionan en la zona UTC por lo que cada análisis sintáctico de la cadena terminó creando un objeto de tiempo, el tiempo de 0000 (UTC):
2014-05-19 08:13:26 +0000
Entonces conversión a dio:
Mon, 19 May 2014 20:13:26 NZST +12:00
que, como se puede ver es de 12 horas (el desfase UTC) más tarde que el tiempo real que quería.
He intentado utilizar el truco +' Auckland', '...%Z'
como se indica anteriormente sin ningún cambio. Luego utilicé el truco + '+1200', '...%Z'
como se indica arriba, que funcionó correctamente.
Sin embargo, estaba preocupado por el horario de verano, entonces el análisis estaría fuera por una hora, así que esto es lo que he terminado todavía con:
Time.strptime(call_data[:datetime].gsub(/\./, "").gsub(/am/, "AM").gsub(/pm/, "PM") + (Time.zone.now.time_zone.utc_offset/3600).to_s.ljust(4,'0').rjust(6,' +'), '%d/%m/%Y %I:%M:%S %p %Z').in_time_zone(Time.zone)
Resultado:
Mon, 19 May 2014 08:13:26 NZST +12:00
No es particularmente elegante pero funciona.
si se encuentra en un país con CEST/CET timezone un desplazamiento fijo no funcionará. También estoy interesado en esto, no veo cómo hacer analizar strptime para la zona horaria actual (pero no el valor en este momento, el correcto dependiendo de la cadena analizada). – tokland