FirebirdSQL logo

Format du fuseau horaire

Le fuseau horaire peut être spécifié comme une chaîne de caractères avec la région du fuseau horaire (par exemple, America/Sao_Paulo), ou commeDécalage hours:minutes par rapport à GMT (par exemple -03:00).Une liste des fuseaux horaires régionaux et de leurs identifiants se trouve dans le tableau suivant RDB$TIME_ZONES. Les règles de conversion des fuseaux horaires régionaux en un décalage en minutes peuvent être obtenues en utilisant la procédure suivante RDB$TIME_ZONE_UTIL.TRANSITIONS.

{TIME | TIMESTAMP} WITH TIMEZONE est considérée comme égale à une autre {TIME | TIMESTAMP} WITH TIMEZONE, si leur conversion à UTC est égal à par exemple time '10:00 -02' = time '09:00 -03', car les deux temps sont équivalents time '12:00 GMT'.Ceci est également vrai dans le contexte de la contrainte UNIQUE et pour le tri.

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.