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, respectivamenteTIME_ZONE
, yUSE_TZ
- Si se
USE_TZ
configuraTrue
el tiempo, Django usará la configuración de zona horaria por defecto del sistema, es decirAmerica/Chicago
, en este momentoTIME_ZONE
si es o no ajuste no funciona.
- Si
USE_TZ
establecidoFalse
, y elTIME_ZONE
conjuntoNone
, Django seguirá utilizando el valor predeterminadoAmerica/Chicago
de tiempo. SiTIME_ZONE
se establece en otra zona horaria, a continuación, también apunta situación, si un sistema Windows, elTIME_ZONE
ajuste es inútil, Django usará el momento de esta máquina. Si otros sistemas, se utiliza el tiempo de la zona horaria, la configuraciónUSE_TZ = False
,TIME_ZONE = 'Asia/Shanghai'
y Shanghai es el uso delUTC
tiempo
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):
- Uso
manage.py shell
introduzca entorno de shell Django, con unaModel.objects.all()
que comprende ciclo de una poligonalDateTimeField
campo modelo, restandotimedelta(hours=8)
; - 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":
- Almacenada en la base de datos para asegurarse de que la hora UTC;
- 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