Sémantique régionale TIME WITH TIME ZONE
Par définition, les fuseaux horaires régionaux dépendent du temps (date et heure — ou horodatage) pour connaître son décalage UTC par rapport à GMT.Mais Firebird supporte également les fuseaux horaires régionaux dans les valeurs TIME WITH TIME ZONE
.
Lors de la construction d’une valeur TIME WITH TIME ZONE
à partir d’un littéral ou de sa conversion, la valeur UTC doit être calculée et ne peut pas être modifiée, donc la date actuelle ne peut pas être utilisée.Dans ce cas, la date fixe 2020-01-01
est utilisée.Ainsi, la comparaison de TIME WITH TIME ZONE
avec différents fuseaux horaires se fait de la même manière qu’ils représentent les valeurs de TIMESTAMP WITH TIME ZONE
à une date donnée.
Cependant, lors de la conversion entre les types TIMESTAMP
et TIME WITH TIME ZONE
, cette date fixe n’est pas utilisée,sinon, il peut y avoir des conversions étranges où la date actuelle a un décalage différent (en raison des changements d’heure d’été) que dans 2020-01-01
.Dans ce cas, la conversion de TIME WITH TIME ZONE
en TIMESTAMP WITH TIME ZONE
préserve une partie du temps (si possible).Par exemple, si la date actuelle est le 2020-05-03
, le décalage effectif dans le fuseau horaire America/Los_Angeles est de -420, et son décalage effectifdans 2020-01-01
est -480, mais cast(time '10:00:00 America/Los_Angeles' as timestamp with time zone)
donnera 20-05-03 10:00:00.0000 America/Los_Angeles
au lieu de corriger le timestamp.
Mais la date à laquelle l’heure d’été commence manque une heure, par exemple, pour le fuseau horaire America/Los_Angeles en 2021-03-14
il n’y a pas d’heure de 02:00:00
à 02:59:59
.Dans ce cas, la conversion est effectuée comme une construction littérale et l’heure est corrigée à la prochaine valeur valide.Par exemple, dans 2021-03-14
cast(time '02:10:00 America/Los_Angeles' as timestamp with time zone)
produira un résultat 2021-03-14 03:10:00.0000 America/Los_Angeles
.