广告
返回顶部
首页 > 资讯 > 后端开发 > Python >django时区问题的解决
  • 408
分享到

django时区问题的解决

2024-04-02 19:04:59 408人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

前言 我们都知道时区,标准时区是UTC时区,Django默认使用的就是UTC时区,所以我们存储在数据库中的时间是UTC的时间,但是当我们做的网站只面向国内用户,或者只是提供内部平台

前言

我们都知道时区,标准时区是UTC时区,Django默认使用的就是UTC时区,所以我们存储在数据库中的时间是UTC的时间,但是当我们做的网站只面向国内用户,或者只是提供内部平台使用,我们希望存储在数据库中的时间就是本地时间(东八区的时间),那么djanGo也是可以完成这样的需求的

await时间和navie时间

什么是await时间和navie时间?它是我们python中的两种时间类型

  • navie:不知道自己的时间表示哪个时区
  • await:知道自己的时间表示的是哪个时区的

django设置东八区时间

我们想让django中的时区变为东八区的时间,很简单


USE_TZ = False
TIME_ZONE = 'Asia/Shanghai'

在settings.py文件中将USE_TZ设置为False,将TIME_ZONE设置为亚洲上海,之后我们在模型中创建时间字段的时候,在数据库中存储的就是东八区的时间,而时间的类型会使navie类型,所以我们就不能再把navie类型的时间转换成其他时区的类型,所以我们一般不建议这么做。 

django设置UTC时区

django中默认设置的是UTC时区,所以我们数据库中存储时间就是UTC时区的时间,也就是0时区,比我们正常见到的少8个小时,但是它的时间是await类型,可以转成任意时间的时区。

django中提供了2个时间的方法

  • django.utils.timezone.now:会根据settings.py文件中是否设置了USE_TZ=True获取当前的时间。如果为Ture,那么就获取一个aware类型的UTC时间,如果为False,那么就获取一个navie类型的时间
  • django.utils.timezone.localtime:会根据setting.py中的TIME_ZONE来将一个aware类型的时间转换为TIME_ZONE指定时区的时间

下面列出了几个常见的时区问题,并提供相关原因,如有不对,欢迎指出。

问题一:三个时间datetime.datetime.now()、datetime.datetime.utcnow()与django.util.timezone.now()的区别

datetime.datetime.now():输出的永远是本地时间(naive time)与配置无任任何关系。datetime.datetime.utcnow():如果setting中配置USE_TZ=True则输出的是UTC时间(naive time),如果setting中配置USE_TZ=False,则该输出时间与datetime.datetime.now()完全相同。django.util.timezone.now():如果setting中配置USE_TZ=True则输出的是UTC时间(active time),如果配置USE_TZ=False,则与datetime.datetime.now()完全相同。

问题二:django存储到数据库的时间比本地时间小8个小时?

首先要明确的一点,Django1.4版本之前,对时区毫无概概念,对时间的存取、展示不做任何处理,数据库里存储的通常是本地时间,当然都是naive time。

Django在1.4版本之后存储如果设置了USE_TZ=True,则存储到数据库中的时间永远是UTC时间。这时如果settings里面设置了USE_TZ=True与TIME_ZONE = 'UTC',用datetime.datetime.now()获取的时间django会把这个时间当成UTC时间存储到数据库中去。如果修改设置为USE_TZ=True与TIME_ZONE = 'Asia/Shanghai',用datetime.datetime.now()获取的时间由于不带时区,django会把这个时间当成Asia/Shanghai时间,即东八区时间,然后django会把这个时间转成带时区UTC时间存储到数据库中去,而读的时候直接按UTC时间读出来,这就是网上很多人遇到的存储到数据库中的时间比本地时间会小8个小时的原因。

问题三:DateTimeField role_cost_history.cost_time received a naive datetime (2015-05-12 19:59:01.259517) while time zone support is active?

这个问题是因为如果设置了USE_TZ=True之后,model里面认为DateTimeField使用UTC时间(带时区的时间),这时用datetime.datetime.now()获取的时间是不带时区的就会报这个问题。

问题四:django.util.timezone.now()输出时间比本地时间小8个小时

只要设置了USE_TZ=True,django.util.timezone.now()输出地永远是UTC时间,不管你设置的TIME_ZONE是什么。如果USE_TZ=False,则django.util.timezone.now()输出等同于datetime.datetime.now(),也不管TIME_ZONE设置的是什么。

问题五:模板显示时间

在设置了USE_TZ=True之后,如果设置了TIME_ZONE = 'Asia/Shanghai',尽管数据库中存储的是UTC时间,但在模板显示的时候,会转成TIME_ZONE所示的本地时间进行显示。

建议:为了统一时间,在django开发时,尽量使用UTC时间,即设置USE_TZ=True,TIME_ZONE = 'Asia/Shanghai',并且在获取时间的时候使用django.util.timezone.now()。因为后台程序使用时间时UTC时间就能满足,也能保证证模板时间的正确显示。

到此这篇关于django时区问题的解决的文章就介绍到这了,更多相关django 时区内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: django时区问题的解决

本文链接: https://www.lsjlt.com/news/126216.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • django时区问题的解决
    前言 我们都知道时区,标准时区是UTC时区,django默认使用的就是UTC时区,所以我们存储在数据库中的时间是UTC的时间,但是当我们做的网站只面向国内用户,或者只是提供内部平台...
    99+
    2022-11-12
  • 如何解决django时区问题
    这篇文章给大家分享的是有关如何解决django时区问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言我们都知道时区,标准时区是UTC时区,django默认使用的就是UTC时区,所以我们存储在数据库中的时间是U...
    99+
    2023-06-15
  • Django的时区设置问题
    1.Django的时区问题   django默认的时区是UTC,平时是没有什么影响的,但是在需要将时间戳转换成本时区的时间或者是获取当前的本地的localtime的时候就出现了问题。之前程序在测试时是运行在Windows环境,所以即使se...
    99+
    2023-01-30
    时区 Django
  • 解决MySQL8.0时区的问题步骤
    软件版本 Windows:Windows10 MySQL:mysql-8.0.16-winx64.zip 问题描述 java将当前时间保存到MySQL数据库时,MySQL中的时间不正确 问题分析 原因...
    99+
    2022-05-15
    MySQL8.0时区 MySQL 时区
  • mysql解决时区相关问题
    前言: 在使用 MySQL 的过程中,你可能会遇到时区相关问题,比如说时间显示错误、时区不是东八区、程序取得的时间和数据库存储的时间不一致等等问题。其实,这些问题都与数据库时区设置有关,本篇文章将从数据库参数入手,逐...
    99+
    2022-05-25
    mysql 时区 mysql 时区问题
  • 解决Golang time.Parse和time.Format的时区问题
    一、问题描述 在windows下,time.Parse()的时区和time.Format()的时区是一致的。 但是在linux环境下,time.Parse()的默认时区是UTC,ti...
    99+
    2022-11-12
  • 解决Mybatis的serverTimezone时区出现问题
    目录Mybatis serverTimezone时区出现问题错误信息出现原因解决Mybatis 插件碰到的时区问题及用法Mybatis serverTimezone时区出现问题 错误...
    99+
    2022-11-12
  • Mysql时区问题及解决方法
    MySQL是一种常用的开源关系型数据库,它在处理时间和日期时会受到时区的影响。因此,在使用MySQL时,时区设置容易引发一些错误。本文将介绍MySQL时区问题可能引发的错误,并提供一些解决方案。 错误1:时间不正确 在使用MySQL时,如果...
    99+
    2023-09-05
    mysql 数据库
  • Jenkins安装的时区问题分析解决
    目录一、首先根据官方的方式去修改启动参数二、用另外一种办法,更改系统时区正常情况下,jenkins是Java执行在Java容器,比如tomcat容器之下,只要改了tomcat的时区就...
    99+
    2022-11-13
  • Jenkins安装的时区问题怎么解决
    本篇内容主要讲解“Jenkins安装的时区问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Jenkins安装的时区问题怎么解决”吧!正常情况下,jenkins是Java执行在Java容...
    99+
    2023-06-29
  • 使用k8tz解决pod内的时区问题(坑的解决)
    目录使用k8tz优雅的解决pod内的时区问题1.问题简介2.k8tz3.安装k8t4.注入策略坑和解决办法1.helm安装失败2.查看时间的顺序使用k8tz优雅的解决pod内的时区问...
    99+
    2022-11-13
    k8tz时区问题解决 k8tz pod时区
  • 解决MySQL时区日期时差8个小时的问题
    目录场景:解决:mysql查出时间相差14小时问题重现问题排查场景: 我们在mysql客户端查询 now() 系统当前日期时间,会发现得到的结果比系统实际日期时间慢8个小时左右,这是由于不同的时区导致的 解决: 1、在 ...
    99+
    2023-01-04
    MySQL差8个小时 MySQL时区差8个小时
  • 一文解决MySQL时区相关问题
    前言: 在使用MySQL的过程中...
    99+
    2022-10-18
  • Mysql时区错误问题怎么解决
    本文小编为大家详细介绍“Mysql时区错误问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Mysql时区错误问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2022-10-19
  • 在Docker容器中部署Django的时区问题
    目录Django 中与时区有关的配置USE_TZ=TrueUSE_TZ=FalseLinux 容器中时区的设置进入 Django 环境查看时间和时区修改 Linux 容器时区进入 D...
    99+
    2022-11-12
  • 解决Django cors跨域问题
    Django cors跨域问题 前后端分离项目中的跨域问题 即同源策略 同源策略:同源策略/SOP(Same origin policy)是一种约定,由 Netscape 公司 19...
    99+
    2022-11-12
  • mysql的timestamp存在时区问题怎么解决
    本篇内容介绍了“mysql的timestamp存在时区问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2022-10-19
  • Django解决跨域请求的问题
    一、引入   对于想要利用django框架实现前后端分离的童鞋来说,首要的问题便是解决跨域请求的问题。何为跨域请求?简单来说,就是当前发起的请求的域与该请求指向的资源所在的域不一致。当协议+域名+端口号均相同,那么就是同一个域。举个例子...
    99+
    2023-01-30
    Django
  • mysql的timestamp存在的时区问题怎么解决
    这篇文章主要讲解了“mysql的timestamp存在的时区问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql的timestamp存在的时...
    99+
    2022-10-19
  • Docker Alpine镜像时区问题怎么解决
    这篇文章主要介绍了Docker Alpine镜像时区问题怎么解决,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。最近在使用Docker 部署Java应用时发现时区不对,使用jd...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作