| Documentation PostgreSQL 9.5.25 > Annexes > Support de date/heure > Gestion des horodatages ambigus ou invalides | |
| Support de date/heure | Mots clés Date/HeureSuivant |
D'ordinaire, si une chaîne date/heure est syntaxiquement valide mais contient des valeurs de champs hors de l'intervalle, une erreur sera renvoyée. Par exemple, une entrée indiquant le 31 février sera rejetée.
Lors d'un changement d'heure, il est possible qu'une chaîne apparemment valide représente un horodatage inexistant ou ambigu. Ce genre de cas n'est pas rejeté. L'ambiguité est résolue en déterminant le décalage UTC à appliquer. Par exemple, supposons que le paramètre TimeZone est configuré à America/New_York :
=> SELECT '2018-03-11 02:30'::timestamptz; timestamptz ------------------------ 2018年03月11日 03:30:00-04 (1 row)
Comme ce jour était une transition vers l'avant pour ce fuseau horaire, l'heure 2:30AM n'existe pas ; les horloges passent directement de 2h à 3h EDT. PostgreSQLTM interpréte l'heure donnée comme s'il s'agissait de l'heure standard (UTC-5), qui se décline donc en 3:30 EDT (UTC-4).
De la même façon, prenons en considération ce comportement lors d'une transition en arrière :
=> SELECT '2018-11-04 02:30'::timestamptz; timestamptz ------------------------ 2018年11月04日 02:30:00-05 (1 row)
À cette date, il existe deux interprétations possibles de 2:30AM ; soit 2:30AM EDT, soit une heure après la transition, 2:30AM EST. De nouveau, PostgreSQLTM interpète l'heure donnée comme s'il s'agissait de l'heure standard (UTC-5). Nous ouvons forcer l'interprétation en spécifiant le temps et sa règle de conversion :
=> SELECT '2018-11-04 02:30 EDT'::timestamptz; timestamptz ------------------------ 2018年11月04日 01:30:00-05 (1 row)
Cet horodatage peut être interprété soit comme 2:30 UTC-4 soit comme 1:30 UTC-5 ; le code de sortie de l'horodatage a choisi ce dernier.
La règle précise qui se trouve appliquée dans de tels cas est qu'un horodatage invalide qui semble survenir pendant une transition vers l'avant est affecté au décalage UTC qui prévaut dans le fuseau horaire juste avant la transition alors qu'un horodatage ambigu qui semble survenir pendant une transition vers l'arrière se voit affecté le décalage UTC qui prévaut juste après la transition. Dans la plupart des fuseaux horaires, ceci est équivalent à dire que « l'interprétation du temps standard est préféré lorsqu'il y a un doute ».
Dans tous les cas, le décalage UTC associé à un horodatage peut être spécifié explicitement, en utilisant soit un décalage numérique UTC ou une abréviation de fuseau horaire correspondent au décalage TUC fixé. La règle donnée s'applique seulement si nécessaire pour convertir un décalage UTC pour un fuseau horaire pour lequel le décalage varie.