Django settings.py impacto TIME_ZONE USE_TZ sobre el acceso a la configuración del sistema de tiempo de fecha y hora

Configuración general

LANGUAGE_CODE = "zh-Hans #admin idioma es el chino

TIME_ZONE = 'Asia / Shanghai en' # usando ocho distritos en hora del este

USE_I18N = Verdadero

USE_L10N = Verdadero

USE_TZ = False # si desea utilizar UTC vez

 

  

    • En el archivo de configuración Django settings.py, ahora hay dos parámetros de configuración relacionados con el tiempo y la zona horaria, respectivamente TIME_ZONE, yUSE_TZ
    • Si se USE_TZconfigura Trueel tiempo, Django usará la configuración de zona horaria por defecto del sistema, es decir America/Chicago, en este momento TIME_ZONEsi es o no ajuste no funciona.
    • Si USE_TZestablecido False, y el TIME_ZONEconjunto None, Django seguirá utilizando el valor predeterminado America/Chicagode tiempo. Si TIME_ZONEse establece en otra zona horaria, a continuación, también apunta situación, si un sistema Windows, el TIME_ZONEajuste es inútil, Django usará el momento de esta máquina. Si otros sistemas, se utiliza el tiempo de la zona horaria, la configuración USE_TZ = False, TIME_ZONE = 'Asia/Shanghai'y Shanghai es el uso del UTCtiempo

Django permiten USE_TZ = raíz verdadera

Después de Django 1.4, cuestiones de huso horario, finalmente resueltos. Aunque  la biblioteca pytz  es opcional, pero pytz Django puede ayudar a identificar la  TIME_ZONE = 'Asia/Shanghai' zona horaria correspondiente es UTC + 8 tiempo, se recomienda activar la  USE_TZ = True instalación simultánea también pytz.

Antes de 1,4, Django existe el concepto de zonas de tiempo, el tiempo de acceso, que no muestra el procesamiento, el almacenamiento de base de datos es generalmente de hora local (hora local). Después de 1,4, en  settings la que establece  USE_TZ = True que es el momento de hacer toda Django interna como  la hora UTC (tiempo de Beijing es UTC + 8) de tratamiento.

Pero no terminan, hay algunos trabajos de reparación trivial para hacerse - el código antiguo y la migración de datos, o el tiempo de acceso, se mostrará un error.

la migración de base de datos

Si ha configurado previamente  TIME_ZONE = 'Asia/Shanghai', se almacena en la base de datos es el momento de la UTC + 8. Permitiendo USE_TZ = True que queremos todos los campos de la fecha y hora de base de datos (fecha y hora) todos convertidos en hora UTC.

Para convertir la hora UTC tiene dos métodos (Nota: el PostgreSQL tiene un método especial):

  1. Uso  manage.py shell introduzca entorno de shell Django, con una  Model.objects.all() que comprende ciclo de una poligonal DateTimeField campo modelo, restando  timedelta(hours=8);
  2. Utilice la base de datos  UPDATE declaración;

No se recomienda el primer método, ya que el ORM  save() método activa la  post_save señal, puede haber efectos secundarios no quiere ver.

El segundo método es seguro (nota que la base de datos de copia de seguridad), MySQL se puede utilizar bajo la siguiente instrucción SQL para la actualización de marca de tiempo:

ACTUALIZACIÓN `your_model` SET` last_modified` = DATE_SUB ( `last_modified`, el intervalo de 8 horas) WHERE 1;

soporte nativo de PostgreSQL para la zona horaria campo de tiempo, por lo que el enfoque no es el mismo, ver la documentación oficial de Django  zonas horarias .

código de migración

Habilitadas  USE_TZ = True , el tiempo de procesamiento, hay dos "reglas de oro":

  1. Almacenada en la base de datos para asegurarse de que la hora UTC;
  2. Cuando los parámetros de tiempo transcurrido entre las funciones, para asegurar que el tiempo se ha convertido en tiempo UTC;

Por ejemplo, por lo general obtener la hora actual se utiliza:

importar datetime 

ahora = datetime.datetime.now ()

Habilitado  USE_TZ = True , tiene que escribir:

fecha y hora de importación 
de importación django.utils.timezone UTC 

ahora = datetime.datetime.utcnow (). reemplace (tzinfo = UTC)

Para asegurarse de que  now la variable se almacena en el tiempo UTC.

再如 fromtimestamp() 这个函数,启用 USE_TZ = True 后应使用 utcfromtimestamp() 函数替代。

模板

除非应用支持用户设置自己所在的时区,通常我们不需要关心模板的时区问题。模板在展示时间的时候,会使用 settings.TIME_ZONE 中的设置自动把 UTC 时间转成 settings.TIME_ZONE 所在时区的时间渲染。

如果确实需要支持用户设置时区,参考 Django 官方文档 Time zones

附录

Django 官方网站对 timezone 的说明:

https://docs.djangoproject.com/en/1.11/topics/i18n/timezones/

参考链接:

https://blog.csdn.net/wy00703/article/details/45071277

https://blog.csdn.net/qq_37049781/article/details/79347278

https://www.cnblogs.com/brad1994/p/6761110.html

 

 

Supongo que te gusta

Origin www.cnblogs.com/fanhua999/p/12544720.html
Recomendado
Clasificación