/ O Django detecta automaticamente o fuso horário do usuário final? - python, django, datetime, fuso horário, django-views

O Django detecta automaticamente o fuso horário do usuário final? - python, django, datetime, fuso horário, django-views

Eu estou construindo uma aplicação no Django quepermite que o usuário final recupere informações que são sensíveis à hora do dia (12h às 12h) em um determinado dia. Eu armazeno esta informação no meu banco de dados como um inteiro representando os segundos desde a meia-noite em incrementos de 30 minutos. Eu estava olhando a documentação do fuso horário do Django: https://docs.djangoproject.com/en/2.0/topics/i18n/timezones/ e fiquei confuso sobre se o Django usa automaticamente a hora do usuário final, ou se devo coletar essas informações e contabilizá-las em minhas visualizações.

Qualquer informação ajudaria! Obrigado.

Respostas:

3 para resposta № 1

Não. Existem alguns pacotes nos quais você pode detectar o fuso horário com base no endereço IP. Você pode olhar para https://github.com/adamcharnock/django-tz-detect


1 para resposta № 2

O Django não detecta o fuso horário do usuário final. Mas o que isso faz é muito inteligente.

Considere isto:

Client               |  Server              | UTC
time      9:00 am    |  time      12:00 pm  | time   7:00 am
timezone  UTC+2:00   |  timezone  UTC+5:00  |

Como você pode ver, o servidor e o cliente estão em fusos horários diferentes e, portanto, têm horário local diferente.

Agora, digamos que o cliente faça um pedido para criar um novo objeto em seu banco de dados. Esse objeto tem um campo de data. Então, o que o Django faz é salvar a data do objeto em UTC.

Como isso funciona?

O Django primeiro levará a hora local do servidor,isso é 12:00 am. Em seguida, ele será convertido para a hora UTC, subtraindo 5 horas, o que se torna 7:00 da manhã. E esta é a hora que o Django irá usar para salvar o objeto.


Agora, vamos dizer mais tarde, o cliente quer ver a que horas ele criou esse objeto.

O tempo de criação do objeto é 7:00 am UTC. Para exibir o tempo de criação do objeto para o seucliente, você pode usar o aplicativo vinculado por Jason em outra resposta. Mas eu não acho lookup timezone usando IP muito confiável como o usuário poderia estar usando um proxy.

OU, você pode renderizar o horário no UTC e usar algum JavaScript para convertê-lo em horário local do Cliente. Como o JS é executado no navegador, ele selecionará com precisão o fuso horário do cliente em seu computador.

Finalmente, quando você converte 7:00 am UTC para o fuso horário do cliente, adicionando 2 horas (como é 2 horas à frente do UTC), o cliente verá o tempo de criação do objeto como 9:00 am que é o que eles esperavam.

Não só isso, se há outro cliente do outro lado da Terra em UTC-5:00 fuso horário, você pode exibir o tempo do objeto para eles, subtraindo 5 horas o que daria 2:00 am. Então, de acordo com esse usuário, foi adicionado às 2:00 da manhã.