Comparer des dates avec des fuseaux horaires différents

Dans certains cas, notamment quand des données GPS sont traitées, la comparaison des dates peut être compliquée. Les données GPS sont données systématiquement en temps universel (UTC), alors que les dates stockées dans les bases de données le sont souvent dans le fuseau horaire du pays.

Avec PostgreSql, il est assez simple de comparer les données les unes avec les autres. Voici un exemple de script (clause where) :

where (gpsdate at time zone 'utc') between (startdate at time zone 'Europe/Paris') and (enddate at time zone 'Europe/Paris')

La recherche permet de rechercher les dates GPS comprises entre deux dates. Le script complet permet de générer une ligne géographique à partir des longitudes et latitudes enregistrées :

insert into trace 
select id, st_setsrid(st_makeline(st_point(longitude, latitude) order by gpsdate),4326)
from gps, trait
where
(gpsdate at time zone 'utc') between (startdate at time zone 'Europe/Paris') and (enddate at time zone 'Europe/Paris')
group by id;