Abaixo estão três maneiras de retornar informações de fuso horário de um valor de data e hora no Oracle Database.
O EXTRACT()
Função
O
EXTRACT(datetime)
A função é usada para extrair várias partes de data e hora de um valor de data e hora. Isso inclui as informações de fuso horário. Aqui está um exemplo:
SELECT EXTRACT(
TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin'
)
FROM DUAL;
Resultado:
Australia/Darwin
Nesse caso, usei o
TIMEZONE_REGION
argumento para extrair a região do fuso horário. Os argumentos disponíveis para extrair várias informações de fuso horário são:
TIMEZONE_HOUR
TIMEZONE_MINUTE
TIMEZONE_REGION
TIMEZONE_ABBR
Também é possível usar um
TIMEZONE_OFFSET
argumento, embora isso não apareça na sintaxe documentada do Oracle para esta função. Aqui está um exemplo de como obter a abreviação do fuso horário:
SELECT
EXTRACT(TIMEZONE_ABBR FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
FROM DUAL;
Resultado:
ACST
Observe que, ao usar os argumentos de fuso horário acima, o valor datetime deve ser avaliado como uma expressão do tipo de dados
TIMESTAMP WITH TIME ZONE
ou TIMESTAMP WITH LOCAL TIME ZONE
. O
EXTRACT()
A função também aceita argumentos para outras partes de data e hora, como YEAR
, MONTH
, HOUR
, etc O TO_CHAR(datetime)
Função
Também podemos usar o
TO_CHAR(datetime)
funcionam como um método alternativo para obter informações de fuso horário de um valor de data e hora. Esta função aceita o valor datetime ou interval como seu primeiro argumento e um modelo de formato como seu segundo argumento. A função então converte o valor para um tipo de dados de
VARCHAR2
no formato especificado. O modelo de formato especifica o formato para o qual retornar o valor de data/hora/intervalo. O modelo de formato consiste em um ou mais elementos de formato. Isso nos permite elaborar cuidadosamente os resultados para refletir o formato desejado.
Se quisermos apenas retornar informações de fuso horário, podemos usar um dos elementos de formato para essa finalidade específica.
Existem alguns elementos de formato diferentes que podemos usar ao retornar informações de fuso horário de um valor de data e hora.
Vamos começar com o
TZR
elemento de formato:SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZR'
)
FROM DUAL;
Resultado:
AUSTRALIA/DARWIN
Este elemento de formato retorna a região do fuso horário. Se o valor datetime incluir apenas o deslocamento de fuso horário, isso será retornado.
O
TZD
elemento de formato pode ser usado para retornar informações de horário de verão. Ele retorna as informações de fuso horário de forma abreviada. Exemplo:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZD'
)
FROM DUAL;
Resultado:
ACST
Alternativamente, podemos usar o
TZH
e TZM
elementos de formato para retornar as horas e minutos do fuso horário, com base no deslocamento do fuso horário. SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZH:TZM'
)
FROM DUAL;
Resultado:
+09:30
O TZ_OFFSET()
Função
O
TZ_OFFSET()
A função retorna o deslocamento de fuso horário correspondente ao argumento com base na data em que a instrução é executada. Aqui está um exemplo de uso de
TZ_OFFSET()
para retornar o deslocamento de fuso horário com base na região de fuso horário retornada pelo o EXTRACT()
função:SELECT TZ_OFFSET(
EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
)
FROM DUAL;
Resultado:
+09:30
Também podemos passar
SESSIONTIMEZONE
ou DBTIMEZONE
para TZ_OFFSET()
para retornar o fuso horário de nossa sessão atual e banco de dados, respectivamente:SELECT
TZ_OFFSET(SESSIONTIMEZONE) AS "Session",
TZ_OFFSET(DBTIMEZONE) AS "DB"
FROM DUAL;
Resultado:
Session DB __________ _________ +10:00 +00:00