Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

bfarber

Gravação data/hora com gmt e horário de verão

Recommended Posts

Pessoal, tenho uma dúvida sobre procedimentos de gravação de data/hora no BD. Gostaria de pedir a ajuda de vocês.

 

 

 

Imaginem o seguinte caso para gravação de chamados no BD:

 

Tenho 3 horários:

 

- Servidor -> estará no UTC (GMT 0)

- São Paulo -> GMT -3

- São Paulo no horário de verão -> GMT -3 (+1) = -2

 

Supondo que eu abro o chamado em uma data qualquer no HV de são paulo:

 

Abertura do chamado:

27/11/2007 08:00 (p/ GMT -3)

27/11/2007 09:00 (p/ GMT -2)

27/11/2007 11:00 (p/ UTC) -> gravado no BD

 

Ou seja, o usuário está vendo o chamado como aberto às 09:00 pois está em São Paulo no HV

 

Digamos que ele abra o histórico deste mesmo chamado em 2008 fora do horário de verão.

Teoricamente o sistema pegará o horário UTC (11:00) e irá subtrair 3 por estar no GMT -3 chegando a um valor de 08:00 horas.

Ou seja, o chamado foi aberto às 09:00 do dia 27/11/2007 (com HV), porém ao consultar novamente (fora do HV) o usuário verá que ele foi aberto às 08:00.

Como resolvo este problema?

 

 

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

bfarber,

 

em uma aplicao que trabalhei, nós tinhamos um campo de abertura de chamado que gravava a data e hora do chamado e outro campo identificando se foi em horario de verao ou nao (0 e 1).

Como era gravado somente a abertura de um chamado, este campo nao sofria alteração. Não seria esta caso o seu?!

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Junior,

 

Ainda não é meu caso....

Imagina que a aplicação deverá rodar em várias regiões (inclusive países). Cada local tem um horário de verão. Se fosse considerar apenas São Paulo, sabemos que o horário de verão é padrão. Mas e os locais em que o horário de verão atrasa o relógio apenas 30 minutos? Ou 2 horas.....

 

Valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

bfarber,

 

no sql tem uma função chamada GETUTCDATE()

 

"GETUTCDATE

Returns the datetime value representing the current UTC time (Universal Time Coordinate or Greenwich Mean Time). The current UTC time is derived from the current local time and the time zone setting in the operating system of the computer on which SQL Server is running." -- retirado do book on line

 

o que você poderia fazer eh pegar o resultado e comparar com o getdate, ai você vai ter a diferença de horario. É uma hipotese :)

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Junior,

 

Só o GETUTCDATE não serve.....por exemplo: como vou saber se as 15 horas aqui em são paulo há 1 ano atrás também eram 15 horas no mato grosso (por ex)? e se há 1 ano atrás eles não estivessem no horário de verão e sp estivesse? aí seriam 14 horas......certo?

 

Eu fiz uma pesquisa e verifiquei que os maiores sites de notícias (BBC por exemplo) se baseiam apenas em uma data(local). Então, se você acessar uma notícia no site da BBC Brasil ela vai aparecer como (15:45 h - Brasília) e se for na BBC Inglaterra será (21:45 h - London), ou seja, se eu acessar uma notícia de 20/10/2003 vai aparecer (15:45 h - Brasília) mas eu não tenho como saber qual o horário desta notícia em São Paulo, a não ser que eu consulte se no dia 20/10/2003 São Paulo e Brasília possuiam o mesmo horário (GMT e HV).

 

Acho que a única solução para isso é armazenar um histórico de todos os horários de verão em todos as regiões. Certo?

 

Valeu pela atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que pude perceber, neste caso sim, seria criar uma tabela com este histórico. Só o SQL nao tem como saber qual horario eh de onde.

Qq coisa eh soh gritar :)

 

abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.