/ / Alterando o fuso horário para DateTime em Ruby - ruby, datetime, fuso horário

Alterando o fuso horário para DateTime em Ruby - ruby, datetime, fuso horário

Eu tento extrair informações exif de uma imageme agora tem um problema com o fuso horário dos campos de data. Na própria imagem, a data e a hora são armazenadas sem fuso horário (por exemplo, 2014: 01: 07 20:44:32). Quando eu executo exifr eu recebo um objeto DateTime de volta e posso imprimi-lo em uma string com este comando:

created = date.strftime("%FT%T%:z")
=> "2014-01-07T20:44:32+01:00" # on my system with UTC+1
=> "2014-01-07T20:44:32+00:00" # on TravisCI

O fuso horário da saída muda dependendoas configurações do sistema. Este é um problema, pois preciso obter os mesmos valores para uma imagem específica, independentemente do sistema em que executo o código. Ajudaria se o fuso horário fosse sempre UTC.

Como posso obter um resultado consistente no UTC independente das configurações do sistema? E como posso fazer isso com o Ruby 1.9 e 2.0? Eu encontrei muitas soluções para o Rails, mas não para o Ruby simples. Pode me ajudar?

Respostas:

3 para resposta № 1

utc método converte Time para UTC.

created = date.utc.strftime("%FT%T%:z")

Este método está disponível em 1.8.7, 1.9.3, 2.0.0 e 2.1.0.

Se você não quer afetar o tempo ao mudar o fuso horário, você pode adicionar a diferença antes de converter:

time = Time.now         # => 2014-01-08 21:45:41 +0100
time += time.gmt_offset # => 2014-01-08 22:45:41 +0100
time.utc                # => 2014-01-08 21:45:41 UTC