A maioria dos desenvolvedores escreve seu primeiro código de tratamento de fusos horários supondo que todo deslocamento é um número inteiro de horas em relação ao UTC. Essa suposição vale para a maioria dos fusos e deixa de valer na primeira vez que chega uma requisição de algum lugar que não a segue. Várias partes do mundo usam deslocamentos de meia hora, e pelo menos uma região usa um deslocamento de 45 minutos, e nenhum desses é um caso extremo no sentido de ser raro ou inválido. É simplesmente assim que esses lugares escolheram ajustar seus relógios em relação ao sol e aos vizinhos.
Um deslocamento de meia hora geralmente reflete a longitude de um país situada entre dois fusos horários padrão de hora cheia, com a decisão de dividir a diferença em vez de arredondar para um dos lados. Um deslocamento de 45 minutos é ainda mais raro e tende a refletir uma posição intermediária semelhante, combinada com a escolha deliberada de se manter distinto de um deslocamento padrão vizinho. Nenhum dos dois é um erro nos dados. Ambos são fusos horários legais legítimos, registrados da mesma forma que qualquer fuso de hora cheia no banco de dados IANA.
O ponto em que isso realmente quebra o software é nos cálculos de data e hora que embutem suposições fixas. Um código que arredonda deslocamentos para a hora mais próxima, que armazena um deslocamento como um número inteiro de horas ou que monta uma lista suspensa de fusos horários usando apenas incrementos de hora inteira e meia hora vai tratar esses fusos incorretamente sem avisar. A falha também costuma ser silenciosa. Os horários ficam errados em quinze ou trinta minutos, em vez de gerar um erro óbvio, o que torna o bug fácil de passar despercebido nos testes e faz com que ele só apareça quando um usuário real da região afetada relata algo errado.
A solução é simples se você a prever desde o início: trabalhe sempre com o deslocamento UTC real retornado para um fuso, expresso com precisão de minutos, em vez de supor ou arredondar para horas. Armazene e compare nomes de fusos em vez de deslocamentos sempre que possível, já que o nome carrega o deslocamento exato atual e histórico sem que você precise embutir nada no código.
Uma consulta de fuso horário que retorna o deslocamento preciso junto com o nome do fuso IANA elimina a adivinhação aqui. Consulte as coordenadas ou o fuso diretamente, em vez de supor o deslocamento de um local apenas pelo país ou pela região, já que os deslocamentos podem variar dentro de um mesmo país e raramente se alinham perfeitamente à hora cheia em todos os lugares.
Um endereço no centro de uma cidade bem mapeada quase não diz nada sobre como o seu sistema lida com uma estrada rural, uma fronteira disputada ou uma consulta perto dos polos. Teste os casos difíceis de propósito.
Nem todo conjunto de dados com informações de localização de aparência pública pode ser usado legalmente dentro de um produto pago. Os termos de licenciamento, e não a disponibilidade técnica, costumam definir o limite real.
Quando uma consulta realmente não pode ser resolvida de forma confiável, não retornar nada é uma resposta melhor do que retornar um palpite disfarçado de fato. Veja o raciocínio por trás dessa escolha.