Data e manipulação tempo em aplicações atendendo a clientes em vários fusos horários?
-
18-09-2019 - |
Pergunta
Os problemas de internacionalização associados à manipulação de strings pode muito bem ser resolvido seguindo o conselho: use Unicode e armazenar tudo como UTF-8 em seu banco de dados, então você vai ser capaz de servir os clientes que usam todas as línguas do mundo.
Mas o que sobre os problemas de internacionalização associados à movimentação de data / hora?
Perguntas:
- Existem semelhante fácil de seguir as melhores práticas para resolver as questões de internacionalização que cercam a manipulação do tempo?
- Como você se certificar seus aplicativos podem servir os clientes que operam em diferentes fusos horários? Quais problemas você encontrou e como você resolvê-los?
Solução
Eu seguintes conselhos,
- Loja todo o seu tempo no banco de dados com um fuso horário, de preferência Zulu (GMT).
- Atribua um fuso horário para cada usuário no momento da inscrição. Nós normalmente descobrir isso a partir da linguagem da página de registro ou o código embutido no link da promoção. Às vezes, temos de perguntar usuário.
- Os clientes fazem fuso horário-aware. Este cliente meios não pode exibir a hora do servidor como é. Deve ser apresentada no fuso horário local e em formato local.
- Cliente deve fazer algum esforço para obter informações fuso horário do sistema. Se não, o servidor pode adivinhar a partir de vários dados. Temos bons resultados usando linguagem de primeira, então o endereço IP. Em qualquer caso, as necessidades do cliente para tempo de exibição com informações zona assim que o usuário sabe o que está acontecendo quando o tempo está errado.
- sinalizadores especiais necessidade de certos valores de tempo que não é afetado por fuso horário. Tivemos um erro que o aniversário de usuário muda quando mudam de local. Outras coisas que pertencem a esta categoria, incluindo feriados, horas de loja etc.
- Se você tem que sincronizar relógio com o servidor, por favor não alterar a hora do sistema, apenas armazenar o delta no seu cliente. Tivemos um requisito de segurança que o relógio deve estar em sincronia com o anfitrião. Assim, o nosso cliente sincroniza o relógio do sistema com o nosso servidor na inicialização. Essa é a coisa errada a fazer. Para sistemas mais antigos, como o Windows 95 sem fuso horário, que mudou seu tempo em GMT. Finalmente, os clientes mais antigos foi embora, mas estamos diante de um novo problema é que errei o tempo exato de NTP.
Hope alguns dos nossos erros irá ajudá-lo a evitá-los.
Outras dicas
ZZCoder tem alguns pontos bons. Aqui estão mais algumas:
- Todos os valores de data e hora deve ter um fuso horário associado. Você deve definir o que significa que se uma data e hora não tem um (por exemplo, em alguns casos, isso significará GMT + 0; em outros, é porque o código está no meio de descobrir isso e atribuir um).
- Você provavelmente terá que anexar eventos com data e hora para um local. Isso significa que você terá uma maneira de descobrir quando fuso horário de uma data e hora é permitida a mudança. Isto resolve o problema de aniversários em movimento, mas também permite que o comportamento inteligente quando o horário de verão começa ou termina. No entanto, tome cuidado com os relacionamentos não intencionais:. Criação de uma reunião para várias pessoas em diferentes fusos horários deve referenciar uma entrada canônica, não copiar datetimes e localizá-los
- NÃO fazer cálculos-se:. Sempre sempre sempre fazer as funções de biblioteca para fazer data e hora cálculos
Eu tive um pouco de sorte com isso usando algum JavaScript para que o cliente nos informe de seu fuso horário. Se eu me lembro que envolveu o cálculo do tempo atual na máquina do usuário na hora local e em seguida, comparando isso contra Zulu.