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.
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)
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.
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.