Я «напрашивался» на эту строку:
19/05/2014 8:13:26 a.m.
Местная временная метка, в моем случае это Auckland NZ без метки часового пояса в строке, как видно.
Насколько я могу судить, Time.strptime
использует часовой пояс сервера в качестве базы.
В моей ситуации, и в целом рекомендуется, чтобы мои серверы работали в часовом поясе UTC, поэтому каждый анализ строки заканчивался созданием объекта времени,время до +0000 (UTC):
2014-05-19 08:13:26 +0000
Затем преобразование в in_time_zone(Time.zone)
дало:
Mon, 19 May 2014 20:13:26 NZST +12:00
Что, как видно, на 12 часов (смещение UTC) позже, чемфактическое время, которое я хотел.
Я пытался использовать трюк +' Auckland', '...%Z'
, как указано выше, без каких-либо изменений.Затем я использовал трюк + '+1200', '...%Z'
, как описано выше, который работал правильно.
Однако я был обеспокоен летним временем, тогда разбор был бы на час, так что вот что я закончил:
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)
Результат:
Mon, 19 May 2014 08:13:26 NZST +12:00
Это не особо элегантно, но работает.