Qualidade dos dados

Países que mudaram suas regras de fuso horário

É fácil presumir que, depois de saber o fuso horário de um país, você o sabe para sempre. Na prática, os governos mudam a política de fuso horário com mais frequência do que a maioria das pessoas imagina. Um país pode decidir deixar de adotar o horário de verão depois de usá-lo por décadas. Outro pode deslocar sua diferença padrão em uma hora para se alinhar melhor a um grande parceiro comercial. Um país grande pode redesenhar a fronteira interna entre dois de seus fusos à medida que a administração regional muda. Nenhuma dessas categorias é hipotética. Mudanças assim acontecem em algum lugar do mundo com bastante regularidade, mesmo que um país qualquer possa passar anos ou décadas entre uma mudança e outra.

É exatamente esse o problema que o banco de dados de fusos horários IANA existe para resolver. Em vez de armazenar uma única diferença atual por país, ele acompanha cada fuso nomeado como um histórico de regras ao longo do tempo, com entradas adicionadas sempre que um governo anuncia uma mudança. Um software que usa uma cópia mantida e atualizada regularmente desse banco de dados incorpora as mudanças sem nenhuma alteração no próprio código. Um software que fixa as diferenças por país no código, talvez em uma tabela escrita uma vez durante o desenvolvimento inicial, vai ficar errado silenciosamente na próxima vez que qualquer país coberto mudar suas regras, e a falha não vai se anunciar. Ele simplesmente vai começar a retornar horários locais incorretos para aquele país até que alguém perceba.

É também por isso que armazenar apenas uma diferença de UTC, separada de um fuso nomeado, é arriscado para qualquer dado que deva ser usado por mais de alguns meses. Uma diferença capturada hoje é um retrato de uma regra que pode mudar. Um nome de fuso como Pacific/Auckland ou Asia/Kolkata carrega uma referência ao conjunto de regras mantido, então, desde que o banco de dados subjacente esteja atualizado, os cálculos feitos com esse nome continuam corretos mesmo depois de uma mudança de regra, sem que você precise mexer nos seus próprios dados.

A orientação prática para quem constrói em cima de dados de fuso horário é simples. Armazene nomes de fusos, e não diferenças brutas, no seu próprio banco de dados. Mantenha a biblioteca ou a fonte de dados de fuso horário de que você depende atualizada com uma frequência razoável, já que uma cópia desatualizada se comporta exatamente como uma tabela fixa no código assim que um país coberto muda suas regras. E trate uma consulta de fuso horário como algo a ser chamado na hora para cálculos ligados a datas reais e variáveis, e não como um valor a ser mantido em cache indefinidamente.

Nossa consulta de fuso horário retorna o nome atual do fuso IANA e a diferença para qualquer coordenada, calculados com base em um conjunto de regras mantido, e não em uma tabela estática, que é a única forma de continuar correto à medida que os países ajustam suas próprias regras ao longo do tempo.