Às vezes, precisamos especificar um fuso horário ao usar funções de data e hora no Oracle.
Mas há muitos fusos horários por aí. Como nos lembramos de todos eles? E como sabemos que nosso sistema suporta um determinado fuso horário?
Felizmente, podemos consultar o
V$TIMEZONE_NAMES
view para retornar uma lista de fusos horários válidos. Obter todas as informações de fuso horário
O código a seguir retorna todas as linhas e colunas da exibição:
SELECT * FROM V$TIMEZONE_NAMES;
Há muitas linhas nesta visualização, mas aqui está a aparência das primeiras 10 linhas:
TZNAME TZABBREV CON_ID _____________________ ___________ _________ Africa/Abidjan LMT 0 Africa/Abidjan GMT 0 Africa/Accra LMT 0 Africa/Accra GMT 0 Africa/Accra +0020 0 Africa/Addis_Ababa LMT 0 Africa/Addis_Ababa EAT 0 Africa/Addis_Ababa +0230 0 Africa/Addis_Ababa +0245 0 Africa/Algiers LMT 0 ...
Podemos ver que cada nome de região de fuso horário tem mais de uma abreviação correspondente. Isso serve para coisas como horário de verão, etc.
Aqui está uma tabela que descreve o que algumas das abreviações significam:
Abreviação de fuso horário | Significado |
---|---|
LMT | Hora Média Local |
PMT | Hora Média de Paris |
MOLHADO | Hora da Europa Ocidental |
OESTE | Horário de verão da Europa Ocidental |
CET | Horário da Europa Central |
CEST | Horário de verão da Europa Central |
EET | Horário da Europa Oriental |
EEST | Horário de verão da Europa Oriental |
Obtenha apenas os nomes das regiões
Podemos usar o
DISTINCT
ou UNIQUE
cláusula para retornar apenas os nomes das regiões de fuso horário sem duplicatas. SELECT DISTINCT TZNAME
FROM V$TIMEZONE_NAMES
ORDER BY TZNAME ASC;
Veja como estão as primeiras 10 linhas agora:
TZNAME _____________________ Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau ...
Obter todas as abreviações de um determinado nome de fuso horário
Aqui está um exemplo de uma consulta que retorna todas as abreviações de um determinado nome de fuso horário:
SELECT
TZNAME,
TZABBREV
FROM V$TIMEZONE_NAMES
WHERE TZNAME LIKE '%Sydney%'
ORDER BY TZNAME ASC;
Resultado:
TZNAME TZABBREV ___________________ ___________ Australia/Sydney LMT Australia/Sydney AEDT Australia/Sydney AEST
Sobre arquivos de fuso horário
No Oracle Database, os nomes de fuso horário estão contidos em arquivos de fuso horário.
Você pode consultar o
V$TIMEZONE_FILE
view para ver qual arquivo de fuso horário está sendo usado pelo banco de dados. Exemplo:
SELECT * FROM V$TIMEZONE_FILE;
Resultado:
FILENAME VERSION CON_ID __________________ __________ _________ timezlrg_32.dat 32 0
Meu sistema está usando a versão 32, que é o arquivo de fuso horário padrão para o Oracle 19c (que é o que estou usando). Este arquivo está localizado no seguinte local:
$ORACLE_HOME/oracore/zoneinfo/timezlrg_32.dat
Consulte a documentação da Oracle para Escolher um arquivo de fuso horário para obter mais informações sobre arquivos de fuso horário.