ero "strptiming" questa stringa:
19/05/2014 8:13:26 a.m.
Un timestamp locale, che è nel mio caso è Auckland NZ senza un timbro fuso orario nella stringa come si può vedere.
Come meglio posso dire Time.strptime
utilizza il fuso orario del server come base.
Nella mia situazione, e la buona prassi generale, i miei server gestiscono nel fuso orario UTC così ogni parse della stringa ha finito per creare un oggetto di tempo, il tempo di 0000 (UTC):
2014-05-19 08:13:26 +0000
Poi la conversione a dato:
Mon, 19 May 2014 20:13:26 NZST +12:00
che come si può vedere è di 12 ore (compensato l'UTC) entro e non oltre il tempo effettivo che volevo.
Ho provato a utilizzare il trucco +' Auckland', '...%Z'
come sopra senza alcuna modifica. Ho quindi utilizzato il trucco + '+1200', '...%Z'
come sopra, che ha funzionato correttamente.
Tuttavia ero preoccupato per l'ora legale, quindi l'analisi sarebbe da un'ora, quindi questo è quello che ho Finshed 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)
Risultato:
Mon, 19 May 2014 08:13:26 NZST +12:00
Non è particolarmente elegante ma funziona.
se si è in un paese con fuso orario CEST/CET, un offset fisso non funzionerà. Interessato anche a questo, non vedo come effettuare l'analisi strptime per il fuso orario corrente (ma non il valore adesso, quello giusto a seconda della stringa analizzata). – tokland