PostgreSQL

PostgreSQL To_char Timestamp com fuso horário

PostgreSQL To_char Timestamp com fuso horário

Os métodos de formatação do PostgreSQL incluem uma coleção útil de ferramentas para traduzir diferentes tipos de dados (data / hora, inteiro, ponto flutuante, numérico) para strings formatadas e converter strings formatadas de volta para tipos de dados únicos. Doravante, às vezes precisamos converter os fusos horários também. O tempo é sempre registrado em UTC em carimbos de data / hora PostgreSQL para o formulário de dados de fuso horário, mas é exibido por padrão no navegador, sessão ou hora local do usuário. Uma de suas funções auxiliares nas quais confiamos é o método TO_CHAR (), que permite carimbos de data / hora com fuso horário, entre outras formas, e permite que você organize as partes de um carimbo de data / hora como quiser. Um carimbo de data / hora, uma precisão dupla, a duração, um número ou um valor numérico podem ser convertidos em uma string usando o método PostgreSQL TO_CHAR (). Parece haver um método de argumento único, 'to_timestamp', que recebe um argumento de precisão dupla e se transforma de época Unix em carimbo de data / hora usando o fuso horário. Mostraremos como fazer algo sobre isso nesta postagem. Vamos dar uma olhada em to_char () primeiro.

Sintaxe:

A sintaxe geral para a função to_char () é a seguinte:

>> To_char (expressão, formato);

O método TO_CHAR () no PostgreSQL precisa de duas afirmações:

Existem dois tipos de carimbo de data / hora disponíveis no PostgreSQL:

E aqui está o problema: o formulário de dados de carimbo de data / hora padrão ignora os fusos horários. E é uma necessidade SQL (como isso poderia ter ocorrido parece além). Nosso foco principal é aprender to_Char () timestamp com um fuso horário. Para começar a trabalhar no PostgreSQL com a função 'to_char ()', abra o shell de linha de comando do PostgreSQL e forneça os valores de parâmetro para o servidor obrigatório, banco de dados, número da porta, nome de usuário e senha. Deixe essas considerações por preencher se precisar consumir os parâmetros designados padrão, conforme mostrado na imagem abaixo.

To_char () para número de string

Para entender o conceito da função to_Char () usando carimbo de data / hora com fuso horário, você deve primeiro tentar o exemplo de números de string. Portanto, temos um número '1897' e iremos convertê-lo para '9999.Formato 99 'usando a consulta abaixo. Na saída abaixo, você pode ver que o número da string foi convertido para o formato especificado.

>> SELECIONE to_char (1897, '9999.99 ');

Aqui está outra ilustração para conversão. Desta vez, convertemos um número em um formato diferente com 'vírgula' nele. O caractere 'G' será usado para especificar uma vírgula.

>> SELECIONE to_char (367.78, '9G999.99 ');

To_char Timestamp com TimeZone

Para entender o conceito de carimbo de data / hora com fuso horário, vamos considerar um exemplo simples. Suponha que você esteja no 'Paquistão', então seu fuso horário deve ser 'PKT' agora.

Exemplo 01:

Vamos tentar buscar o carimbo de data / hora atual na consulta SELECT ao convertê-lo para o formato de data e hora, conforme mostrado na consulta abaixo. O termo 'TZ' é usado para devolver o fuso horário atual. A saída exibe o dia, data, hora e fuso horário.

>> SELECT to_char (CURRENT_TIMESTAMP, 'Dia Seg dd, aaaa HH12: MI AM (TZ)');

Vamos mudar nosso fuso horário para 'Europa / Roma'.

>> SET TimeZone = 'Europa / Roma';

Você obterá uma hora, data e fuso horário diferentes ao tentar a mesma consulta SELECT, conforme mostrado.

Exemplo 02:

Quando você especifica o fuso horário na consulta SELECT, a saída não mostrará o fuso horário atual conforme a saída abaixo.

>> SELECIONE to_char (CURRENT_TIMESTAMP NO FUSO HORÁRIO 'Ásia / Jerusalém', 'aaaa HH12: MI AM (TZ)');

Exemplo 03:

Vamos criar uma tabela rápida chamada 'time' com dois campos. Um é do tipo TIMESTAMP e o outro é do tipo TIMESTAMPTZ.

>> CREATE TABLE time (without_timezone TIMESTAMP, with_timezone TIMESTAMPTZ);

Agora vamos verificar o fuso horário atual que estamos usando em nosso sistema usando o comando SHOW no shell da seguinte maneira:

>> MOSTRAR fuso horário;

Agora você deve inserir os valores atuais da data e hora do fuso horário atual que você está usando no seu dispositivo na tabela 'hora' usando a função 'agora ()' conforme mostrado abaixo.

>> INSERT INTO time VALUES (now (), now ());

Agora você pode buscar o registro da tabela 'tempo' usando a consulta SELECT como abaixo. A coluna 'without_timezone' mostra a data e hora atuais sem um fuso horário, enquanto a coluna 'with_timezone' mostra a hora local com o fuso horário completamente.

>> SELECIONE * DA hora;

Vamos alterar o fuso horário para 'US / EASTERN' na consulta abaixo.

>> DEFINIR FUSO HORÁRIO 'EUA / ORIENTE';

Agora vamos verificar a tabela novamente. Você verá como o valor da coluna 'with_timezone' foi exibido de acordo com o fuso horário 'US / EASTERN', mas o valor de 'without_timezone' é o mesmo de antes.

>> SELECIONE * DA hora;

Exemplo 04:

Vamos ter mais alguns exemplos para o método to_char (). Assuma o mesmo 'tempo' da tabela acima. Estaremos convertendo o valor da coluna 'without_timezone' em uma string composta de horas, minutos, segundos e fuso horário. Vamos tentar a consulta SELECT usando o método to_char () para converter o valor da coluna 'without_timezone'. Mencionamos 'TZ' em nossa consulta, mas ele não mostrará o fuso horário porque o valor da coluna não consiste no fuso horário. O comando abaixo indicado fornece a saída:

>> SELECT to_char (without_timezone, 'HH12: MI: SS TZ') FROM time;

Agora vamos tentar a mesma consulta no caso da outra coluna 'with_timezone', para convertê-la para a string de horas, minutos, segundos e fuso horário. Desta vez, ele irá mostrar o fuso horário com o tempo também usando a consulta abaixo.

>> SELECIONE to_char (with_timezone, 'HH12: MI: SS TZ') FROM time;

Conclusão:

Visto que o problema com / sem fuso horário afeta mais do que apenas o particionamento de tabela, eu recomendo que você use o tipo de fuso horário sempre que possível. Quase todas as diretrizes discutidas sobre como fazer a purga dependente do tempo no PostgreSQL usando o horário local. Uma solução adequada, sensível ao fuso horário, adiciona poucas complicações, mas pode salvá-lo de problemas no futuro.

Batalha por Wesnoth 1.13.6 Desenvolvimento lançado
Batalha por Wesnoth 1.13.6 lançado no mês passado, é o sexto lançamento de desenvolvimento no 1.13.série x e oferece uma série de melhorias, principal...
Como instalar o League Of Legends no Ubuntu 14.04
Se você é fã de League of Legends, esta é uma oportunidade para testar o funcionamento de League of Legends. Observe que LOL é suportado no PlayOnLinu...
Instale o último jogo de estratégia OpenRA no Ubuntu Linux
OpenRA é um motor de jogo de estratégia em tempo real Libre / Free que recria os primeiros jogos Westwood como o clássico Command & Conquer: Red Alert...