Documentation PostgreSQL 14.22 » Annexes » Support de date/heure » Gestion des horodatages ambigus ou invalides

Précédent | Niveau supérieur | Suivant
B.1. Interprétation des Date/Heure saisies | Sommaire | B.3. Mots-clés Date/Heure

## B.2. Gestion des horodatages ambigus ou invalides

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. PostgreSQL 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 01:30'::timestamptz;
          timestamptz
    ------------------------
     2018-11-04 01:30:00-05
    (1 row)

À cette date, il existe deux interprétations possibles de 1:30AM ; soit 1:30AM EDT, soit une heure après la transition, 1:30AM EST. De nouveau, PostgreSQL interprète l'heure donnée comme s'il s'agissait de l'heure standard (UTC-5). Nous pouvons forcer l'autre interprétation en spécifiant le temps et sa règle de conversion :

    => SELECT '2018-11-04 01:30 EDT'::timestamptz;
          timestamptz
    ------------------------
     2018-11-04 01:30:00-04
    (1 row)

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 correspondant au décalage UTC 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.