B.2. Manejo de marcas de tiempo no válidas o ambiguas #

Normalmente, si una cadena de fecha/hora es sintácticamente válida pero contiene valores de campo fuera de rango, se arrojará un error. Por ejemplo, se rechazará una entrada que especifique el 31 de febrero.

Durante una transición de horario de verano, es posible que una cadena de marca de tiempo aparentemente válida represente una marca de tiempo inexistente o ambigua. Estos casos no se rechazan; la ambigüedad se resuelve determinando qué desfase UTC aplicar. Por ejemplo, suponiendo que el parámetro TimeZone está configurado en America/New_York, considera lo siguiente:

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

Dado que ese día fue una fecha de transición de adelanto de hora (primavera) en esa zona horaria, no existió el instante de tiempo civil 2:30 AM; los relojes se adelantaron de las 2 AM EST a las 3 AM EDT. PostgreSQL interpreta la hora dada como si fuera la hora estándar (UTC-5), que luego se representa como las 3:30 AM EDT (UTC-4).

Por el contrario, considera el comportamiento durante una transición de retraso de hora (otoño):

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

En esa fecha, había dos interpretaciones posibles de la 1:30 AM; estaba la 1:30 AM EDT, y luego, una hora más tarde, después de que los relojes se retrasaran de las 2 AM EDT a las 1 AM EST, estaba la 1:30 AM EST. Nuevamente, PostgreSQL interpreta la hora dada como si fuera la hora estándar (UTC-5). Podemos forzar la otra interpretación especificando el horario de verano:

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

La regla precisa que se aplica en tales casos es que a una marca de tiempo no válida que parece caer dentro de una transición de adelanto de horario de verano se le asigna el desfase UTC que prevalecía en la zona horaria justo antes de la transición, mientras que a una marca de tiempo ambigua que podría caer a ambos lados de una transición de retraso se le asigna el desfase UTC que prevalecía justo después de la transición. En la mayoría de las zonas horarias esto equivale a decir que en caso de duda, se prefiere la interpretación de la hora estándar.

En todos los casos, el desfase UTC asociado a una marca de tiempo se puede especificar explícitamente, utilizando un desfase UTC numérico o una abreviatura de zona horaria que corresponda a un desfase UTC fijo. La regla que se acaba de dar se aplica solo cuando es necesario inferir un desfase UTC para una zona horaria en la que el desfase varía.