Heidisql: Exibição de carimbo de data / hora incorreta como valor de data na grade

Criado em 31 jan. 2018  ·  5Comentários  ·  Fonte: HeidiSQL/HeidiSQL

Definir "Esta é uma coluna de carimbo de data / hora UNIX" ativa nas opções de visualização de grade para ver um carimbo de data / hora UNIX como representação de data.

Comportamento esperado

O seguinte valor (carimbo de data / hora unix) é armazenado como BIGINT na base de dados:
1098655200
GMT: domingo, 24 de outubro de 2004 às 22h00
Berlim: segunda-feira, 25 de outubro de 2004 12h00 GMT + 02h00 DST

A grade deve ser exibida aqui:
2004-10-24 22:00:00 (GMT) ou
2004-11-25 00:00:00 (local)

Comportamento atual

Grid mostra:
2004-10-24 23:00:00

Parece que o fuso horário momentâneo é usado para exibir o valor, e este é o GMT + 1 a partir de hoje (31/01/2018) na Alemanha, sem horário de verão.
O valor deve ser exibido de acordo com o fuso horário na data especificada, que era GMT + 2, horário de verão ativo.

Passos para reproduzir

  1. Crie uma coluna BIGINT e insira um valor de 1098655200
  2. Defina "Opções de visualização em grade" como "Esta é uma coluna de carimbo de data / hora UNIX"
  3. Você obterá: 2004-10-24 23:00:00
  4. Esperado: 2004-11-25 00:00:00

Contexto

  • Versão HeidiSQL: 9.5.0.5196
  • Sistema de banco de dados + versão: MariaDB 10.2.12
  • Sistema operacional: Windows 10, fuso horário Europa / Berlim
bug

Todos 5 comentários

Ei @mpaland , seu MariaDB está funcionando com o fuso horário correto Europa / Berlim?
Eu não lido com muitas conversões, timestamp grava em UTC, não é? e o MySQL se converte em seu fuso horário?

Tentei reproduzir, mas nos servidores que tenho está sem os fusos horários instalados :(

@lukinhaspm não é uma questão do servidor, é apenas uma questão da representação correta do timestamp no HeidiSQL. Um UNIX TIMESTAMP sempre deve estar em segundos após 01/01/1970 00:00:00 UTC.

Você pode apresentar esse carimbo de data / hora estritamente em UTC, o que é bom, ou em um determinado fuso horário (principalmente no próprio). Para fazer isso, é necessário o fuso horário válido na data do carimbo de data / hora, não na data real.
Parece que o HeidiSQL leva a data real. Eu não olhei em seu código ainda, então é apenas uma especulação.

@mpaland eu entendo e concordo!

Eu investiguei isso um pouco mais. Infelizmente, a solução não parece fácil.
O problema são as regras complicadas do horário de verão em todo o mundo e, pior ainda, sua forma não constante e em constante mudança.
Para obter a hora local DST corrigida para um determinado carimbo de data / hora de época, é necessário saber a regra de DST exata que foi aplicada localmente na hora do carimbo de data / hora.
Uma biblioteca de conversão precisa acompanhar todas as mudanças nas regras do horário de verão em todos os países ao longo dos anos para calcular o deslocamento de qualquer ponto no passado.
O Windows ignora completamente este problema e converte sempre de acordo com a regra _real_ DST no momento da conversão.
Para fazer isso direito, é necessário usar uma das bibliotecas de fuso horário / DST realmente avançadas da rede.

Embora a maior parte do que @mpaland tenha afirmado sobre a necessidade de saber a regra de horário de verão aplicada ao criar o carimbo de data / hora seja tecnicamente verdadeiro (se descartarmos o horário de verão, por exemplo, todos os momentos registrados enquanto ele estava ativo "mudariam" para o período não diurno relativo economia de tempo), ainda é possível usar as regras de horário de verão atuais para exibir corretamente a hora para um carimbo de data / hora.

1584975600 e 1585576800 são ambos 16:00 na Europa / Madrid, mas heidisql representa incorretamente um deles (dependendo se estamos no horário de verão ou não)

Pode ser possível exibir corretamente esses casos sem ser um grande incômodo, apenas verificando se a hora resultante deve ser no horário de verão ou não e aplicando o deslocamento correto.

Mesmo que não seja uma solução perfeita, eu diria que provavelmente cobre a maioria dos casos de uso, e os casos extremos provavelmente seriam facilmente identificados, é mais uma pequena ajuda para os desenvolvedores verificarem que algo está ok do que uma tela confiável para o usuário final.

Esta página foi útil?
0 / 5 - 0 avaliações