Puede depender de la cámara / teléfono y sistema operativo; pero, no creo que la zona horaria esté almacenada explícitamente en los metadatos EXIF de la imagen.
En algunos metadatos, hay un GPS Time (Atomic Clock)
que se establece en UTC. Por lo tanto, es probable que Fotos solo calcule las compensaciones de Date and Time (Original)
para mostrar la zona horaria.
Es posible que puedas usar exiftool para crear una lista de esas dos veces para tus imágenes y buscar valores atípicos que sean más (o menos) diferentes a los demás.
Actualización del póster original:
Junté un script rápido de Python para comparar estos tiempos, e imprimí los que no están en la zona horaria esperada, o tienen diferentes valores por minutos. Deberá exportar los originales sin modificar de las fotos, ya que los modificados no tienen estos metadatos y luego pasar sus nombres de archivo a este script.
Por supuesto, no tengo idea si esto es algo parecido a lo que las fotos hacen para establecer la zona horaria. Pero identificó correctamente las fotos que conocía con la zona horaria incorrecta y no encontró ningún 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)