这个以前没系统处理过,感觉前端页面显示正常,就OK。

但有的不重要的地方,显示有8小时错乱,也没有列入优先级处理。

昨天下细看了一些网上文档,找取了解决思路。

大致想法是:数据库里存+00:00时区的时间,而读到时间之后,具体的时区,由APP框架这一层来处理。

具体到DJANGO+MYSQL来说:

会关系到MYSQL的操作系统时区(MYSQL会读取这个设置,形成system_time_zone)  system_time_zone | CST,

MYSQL的时区: time_zone        +00:00

django框架的四个设置:

TIME_ZONE = 'Asia/Shanghai'

USE_I18N = True

USE_L10N = True

USE_TZ = True

mysql相关命令:

show variables like '%time_zone%';
select now();
set time_zone='+00:00';
set time_zone='SYSTEM';

操作系统输出:

# date
Fri Aug  :: CST 

参考URL:

https://blog.csdn.net/ichuzhen/article/details/38555645

=================================================

五、Django 中使用 MySQL 存储时间遇到的问题

在此先说明一下,我所用的数据库时 CST 时区,与所在的服务器系统时间一致,Django 所在的 WEB 服务器也是统一台机器。在之前使用的过程中,从 Django 中获取到的 localtime 存储到数据库时会被系统自动处理增加8小时。针对这一问题,搜集了各方面的资料。下面就对 Django 的时区机制作个解释。

其实,Django 在配置文件 settings.py 中对时间时区有影响的是两个参数,一个是 TIME_ZONE,另一个是 USE_TZ。根据USE_TZ 官网文档中的描述,这一属性默认值是 False。如果设置为 Ture,Django 内部将会使用对时区敏感的时间,否则 Django 将会使用系统本地的原有时间。(注意:为了方便,由 django-admin.py startproject 创建而来的项目 settings.py 中此项值设置为了 Ture)

与这一属性相关的还有 TIME_ZONE, USE_I18N 和 USE_L10N,下面我们来看一下这几个属性。

TIME_ZONE 官方文档中说,在 Django 1.4 以后的版本中,这一属性值的意义是由 USE_TZ 决定的。这并不是服务器必须的,因为一个服务器可以服务多个 Django 框架的服务,并拥有各自的时区。

首先说明一点,在开启了 Django 所有关于时区的设置之后,本来以为 Django 将会以 UTC 标准时区连接数据库,但是经笔者测试(在 Django 中引入 django.db.connection 连接做查询)发现实际连接的时区是数据库系统的全局设置。确认这一点十分关键,因为它事关全部时间数据的时区问题。

如下是做的一些测试以说明问题。

操作 参数 情形1 情形2 情形3 情形4 情形5
Django settings.py TIME_ZONE Asia/Shanghai Asia/Shanghai Asia/Shanghai Asia/Shanghai Asia/Shanghai
USE_I18N TRUE TRUE TRUE TRUE TRUE
USE_L10N TRUE TRUE TRUE TRUE TRUE
USE_TZ TRUE False False TRUE False
DATETIME_FORMAT Y-m-j H:i:s Z Y-m-j H:i:s Z Y-m-j H:i:s Z Y-m-j H:i:s Z Y-m-j H:i:s Z
database time_zone system_time_zone China Standard Time China Standard Time China Standard Time China Standard Time China Standard Time
time_zone SYSTEM SYSTEM +00:00 +00:00 +00:00
存入 time.strftime('%Y-%m-%d %X', time.gmtime()) OR time.strftime('%Y-%m-%d %X', time.localtime()) 2014-08-27 23:43:19+08:00 2014-08-27 23:45:27 2014-08-27 15:48:56 2014-08-27 15:50:49+00:00 2014-08-27 15:50:49+00:00
在数据库中查询SET time_zone = '+00:00' DATETIME 2014-08-27 15:43:19 2014-08-27 23:45:27 2014-08-27 15:48:56 2014-08-27 15:50:49 2014-08-27 15:50:49
TIMESTAMP 2014-08-27 07:43:19 2014-08-27 15:45:27 2014-08-27 15:48:56 2014-08-27 15:50:49 2014-08-27 15:50:49
在 Django 中读取 DATETIME 2014-08-27 15:43:19+00:00 2014-08-27 23:45:27 2014-08-27 15:48:56 2014-08-27 15:50:49+00:00 2014-08-27 15:50:49
TIMESTAMP 2014-08-27 15:43:19 2014-08-27 23:45:27 2014-08-27 15:48:56 2014-08-27 15:50:49 2014-08-27 15:50:49
在 template 中显示 DATETIME 2014-8-27 23:43:19 28800 2014-8-27 23:45:27 28800 2014-8-27 15:48:56 28800 2014-8-27 23:50:49 28800 2014-8-27 15:50:49 28800
TIMESTAMP 2014-8-27 15:43:19 28800 2014-8-27 23:45:27 28800 2014-8-27 15:48:56 28800 2014-8-27 15:50:49 28800 2014-8-27 15:50:49 28800

由此可见,使用情形4的配置,设置 USE_TZ = Ture,数据库 time_zone = '+00:00',时间设置为 time.strftime('%Y-%m-%d %X', time.gmtime()),可以加时区 '+00:00'(数据库不会关心),在数据库中采用 DATETIME 类型存储最为合适。

Django和Mysql合用时,显示时间问题的更多相关文章

  1. Django读取Mysql数据并显示在前端

    一.首先按添加网页的步骤添加网页,我的网页名为table.html, app名为web table.html放到相应目录下, froms文件提前写好 修改views.py ? 1 2 3 4 5 6 ...

  2. python学习笔记--Django入门一 网页显示时间

    我的笔记是学习http://djangobook.py3k.cn/ 课程时做的,这个上边的文章讲的确实是非常的详细,非常感谢你们提供的知识. 上一篇随笔中已经配置好了Django环境,现在继续跟随ht ...

  3. HttpResponse,render,redirect,静态文件配置,request对象方法,pycharm连接MySQL,django连接MySQL,django ORM

    HttpResponse 主要用于返回字符串类型的数据 def index(request): return HttpResponse('index页面') 在页面中就会显示 index页面 rend ...

  4. Django 连接mysql数据库中文乱码

    Django 连接mysql数据库中文乱码 2018年08月25日 20:55:15 可乐乐乐乐乐 阅读数:566   版本:CentOS6.8 python3.6.4 django1.8.2 数据库 ...

  5. django的mysql设置和mysql服务器闲置时间设置

    服务器启动后,每个进程都会主动连接到mysql,要是长时间没有数据交互,mysql会自动断开连接. show variables like  '%timeout%'; 闲置连接的超时时间由wait_t ...

  6. Django (2006, 'MySQL server has gone away') 本地重现与解决

    最近我们的Django项目供Java Sofa应用进行tr调用时, 经常会出现一个异常: django.db.utils.OperationalError: (2006, 'MySQL server ...

  7. python django+bootstrap4+mysql智慧交通系统构建

    之前,我做了一个实训的项目,但是一直没有展示如何做的,现在就让我讲解一下如何用django+bootstrap4+mysql实现这个智慧交通系统.这里用到的是网页的bootstrap4框架和mysql ...

  8. python基础[16]——解决django连接mysql数据库报错的问题

    Models.py #创建数据表 from django.db import models from django.utils import timezone from tinymce.models ...

  9. [django]Django站点admin支持中文显示和输入设置

    正文: Django站点admin支持中文输入设置,操作如下: 1 需要确定的你的数据库的client客户端和服务端的编码设置为utf-8,如果不是,请将其设置成utf-8编码,我采用mysql,详情 ...

随机推荐

  1. Laravel 返回 JSON 格式

    第一种方法: 第一步.编写 BaseRequest首先我们需要构建一个 BaseRequest 来重写 Illuminate\Http\Request ,修改为默认优先使用 JSON 响应: app/ ...

  2. 科学计算三维可视化---TVTK库可视化实例

    一:TVTK库可视化实例 Plot3D文件知识:PLOT3D 数据格式 PLOT3D文件分为网格文件(XYZ 文件), 空气动力学结果文件 (Q 文件)和通用结果文件(函数文件 + 函数名称文件).网 ...

  3. 让你快速学会Shell脚本

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合.Shell可以直接使用在win/Unix/Linux上面, ...

  4. JAVA-JSP隐式对象

    JSP隐式对象 在本章中,我们将讨论和学习JSP中的隐式对象.这些对象是JSP容器为每个页面中的开发人员提供的Java对象,开发人员可以直接调用它们而不用显式地声明它们再调用. JSP隐式对象也称为预 ...

  5. Spring容器事件、自定义事件

    Spring容器内置事件,如容器的启动.停止.关闭.销毁等事件 <bean name="contextStartedHandler" class="com.nuts ...

  6. 知识笔记:jQuery 事件对象属性小结

    使用事件自然少不了事件对象.因为不同浏览器之间事件对象的获取,以及事件对象的属性都有差异,导致我们很难跨浏览器使用事件对象.jQuery中统一了事件对象,当绑定事件处理函数时,会将jQuery格式化后 ...

  7. tomcat关闭后没有及时释放内存资源

    1.ps -ef|grep java 找到对应的tomcat服务 2.kill -9  线程id 3.free -m 查看内存情况

  8. Unix/Linux系统时间函数API

    首先说明关于几个时间的概念: 世界时:起初,国际上的标准时间是格林尼治标准时间,以太阳横穿本初子午线的时刻为标准时间正午12点.它根据天文环境来定义,就像古代人们根据日晷来计时一样,如下图: 原子时: ...

  9. C++ Primer 5th 第19章 特殊工具与技术

    C++是一种通用型语言,其设计者希望它能处理各种各样的问题,因此除了一些能适用于所有问题的语言特性,还有一些适用于特定问题的特性. 控制内存分配 某些程序对内存分配有着特殊的需求,它们不适合使用标准的 ...

  10. CSS line-height应用

    一.固定高度的容器,单行文本垂直居中 代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf- ...