/ Zmena časového pásma pre DateTime v Ruby - ruby, datetime, timezone

Zmena časového pásma pre DateTime v Ruby - ruby, datetime, timezone

Snažím sa získať exif informácie z obrázkaa teraz máte problém s časovým pásmom pre dátumové polia. V samotnom obrázku sa dátum a čas ukladajú bez časového pásma (napr. 2014: 01: 07 20:44:32). Keď spustím program exifr, získam objekt DateTime späť a môžem ho vytlačiť na reťazec s týmto príkazom:

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

Časové pásmo výstupu sa mení v závislosti odnastavenia systému. Je to problém, pretože potrebujem získať rovnaké hodnoty pre konkrétny obrázok nezávisle od systému, ktorý spúšťam kód. Pomohlo by to, keby časové pásmo bolo vždy UTC.

Ako môžem získať konzistentný výsledok v UTC nezávisle od systémových nastavení? A ako to môžem urobiť s Ruby 1.9 a 2.0? Našiel som mnoho riešení pre Rails, ale nie pre jednoduchú Ruby. Môžeš mi pomôcť?

odpovede:

3 pre odpoveď č. 1

utc metóda konvertuje Time do UTC.

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

Táto metóda je dostupná v častiach 1.8.7, 1.9.3, 2.0.0 a 2.1.0.

Ak nechcete ovplyvniť čas pri zmene časového pásma, môžete pred konverziou pridať rozdiel:

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