Può dipendere dalla fotocamera / telefono e dal sistema operativo; ma, non credo che il fuso orario sia memorizzato in modo esplicito nei metadati EXIF della foto.
In alcuni metadati, c'è un GPS Time (Atomic Clock)
che è impostato su UTC. Quindi, Foto probabilmente calcola solo gli offset di Date and Time (Original)
per visualizzare il fuso orario.
Potresti essere in grado di usare exiftool per creare un elenco di queste due volte per le tue immagini e cercare valori anomali che sono più (o meno) diversi dagli altri.
Aggiornamento dal poster originale:
Ho creato un rapido script Python per confrontare questi tempi e stampare quelli che non si trovano nel fuso orario previsto o che hanno valori diversi per i minuti. Dovrai esportare gli originali non modificati da Foto, poiché quelli modificati non hanno questi metadati e quindi passare i loro nomi di file a questo script.
Naturalmente, non ho idea se questo è qualcosa vicino a ciò che Photos fa per impostare il fuso orario. Ma ha identificato correttamente le foto che conoscevo con il fuso orario sbagliato e non ho trovato alcun falso positivo.
#!/usr/bin/python
from subprocess import check_output
import sys, re, os
from dateutil.parser import parse
from datetime import datetime
expected_offset_hours = 8.0 # set to appropriate time zone offset
def get_field(out, name):
match = re.search("^" + re.escape(name) + "\t(.+?)$", out, re.MULTILINE)
if match:
return match.group(1)
return None
for arg in sys.argv[1:]:
if not os.path.exists(arg):
continue
out = check_output(["exif", "-m", arg])
gps_date = get_field(out, "GPS Date")
gps_time = get_field(out, "GPS Time (Atomic Clock)")
if gps_date == None or gps_time == None:
print arg + "\tNo GPS date/time"
continue
gps_parsed = datetime.strptime(gps_date + " " + gps_time, '%Y:%m:%d %H:%M:%S.%f')
orig_datetime = get_field(out, "Date and Time (Original)")
if orig_datetime == None:
continue
orig_parsed = datetime.strptime(orig_datetime, '%Y:%m:%d %H:%M:%S')
offset_secs = (orig_parsed - gps_parsed).total_seconds()
offset_hours = round(offset_secs / 3600)
offset_mins = abs(offset_secs - (offset_hours * 3600)) // 60
if offset_hours != expected_offset_hours or offset_mins > 0:
#print gps_date + ' ' + gps_time + ' ' + str(gps_parsed)
#print orig_datetime + ' ' + str(orig_parsed)
print arg + "\t" + str(offset_hours) + "\t" + str(offset_mins)