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?
Foi útil?

Solução

Eu seguintes conselhos,

  1. Loja todo o seu tempo no banco de dados com um fuso horário, de preferência Zulu (GMT).
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top