¿Django detecta automáticamente la zona horaria del usuario final?

Estoy creando una aplicación en Django que permite al usuario final recuperar información que es sensible a la hora del día (de 12 a 12 a.m.) en un día determinado. Almaceno esta información en mi base de datos como un número entero que representa los segundos desde la medianoche en incrementos de 30 minutos. Estaba mirando la documentación de la zona horaria de Django: https://docs.djangoproject.com/en/2.0/topics/i18n/timezones/ y me encontré confundido sobre si o Django usa automáticamente el tiempo de los usuarios finales, o si debo recostackr esto La información y la cuenta en mi opinión.

¡Cualquier información sería de gran ayuda! Gracias.

No. Hay algunos paquetes en los que puede detectar la zona horaria según la dirección IP. Puede consultar https://github.com/adamcharnock/django-tz-detect

Django no detecta la zona horaria del usuario final. Pero lo que hace es bastante inteligente.

Considera esto:

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

Como puede ver, el servidor y el cliente están en zonas horarias diferentes y, por lo tanto, tienen una hora local diferente.

Ahora, digamos que el cliente realiza una solicitud para crear un nuevo objeto en su base de datos. Este objeto tiene un campo de fecha. Entonces, lo que Django hace es guardar la fecha del objeto en UTC.

¿Cómo funciona?

Django primero tomará la hora local del servidor, que son las 12:00 am. Luego lo convertirá a la hora UTC al restar 5 horas, que se convierten en las 7:00 am. Y este es el tiempo que Django usará para guardar el objeto.


Ahora, digamos más tarde, el cliente quiere ver a qué hora creó ese objeto.

El tiempo de creación del objeto es a las 7:00 am UTC . Para mostrar el tiempo de creación del objeto para su cliente, puede usar la aplicación vinculada por Jason en otra respuesta. Pero no encuentro que la búsqueda de zona horaria con IP sea muy confiable, ya que el usuario podría estar usando un proxy.

O, puede representar la hora en UTC y usar algún JavaScript para convertirla a la hora local del Cliente. Desde entonces, JS se ejecuta en el navegador, seleccionará con precisión la zona horaria del cliente desde su computadora.

Finalmente, al convertir las 7:00 am UTC a la zona horaria del cliente, agregando 2 horas (ya que está 2 horas por delante de UTC), el cliente verá el tiempo de creación del objeto como las 9:00 am que es lo que esperaban.

No solo, si hay otro cliente en el otro lado de la Tierra en la zona horaria UTC-5:00 , puede mostrarles la hora del objeto restando 5 horas, lo que daría lugar a las 2:00 am . Así que, según ese usuario, se agregó a las 2:00 am.