Django和Mysql合用时,显示时间问题
这个以前没系统处理过,感觉前端页面显示正常,就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合用时,显示时间问题的更多相关文章
- Django读取Mysql数据并显示在前端
一.首先按添加网页的步骤添加网页,我的网页名为table.html, app名为web table.html放到相应目录下, froms文件提前写好 修改views.py ? 1 2 3 4 5 6 ...
- python学习笔记--Django入门一 网页显示时间
我的笔记是学习http://djangobook.py3k.cn/ 课程时做的,这个上边的文章讲的确实是非常的详细,非常感谢你们提供的知识. 上一篇随笔中已经配置好了Django环境,现在继续跟随ht ...
- HttpResponse,render,redirect,静态文件配置,request对象方法,pycharm连接MySQL,django连接MySQL,django ORM
HttpResponse 主要用于返回字符串类型的数据 def index(request): return HttpResponse('index页面') 在页面中就会显示 index页面 rend ...
- Django 连接mysql数据库中文乱码
Django 连接mysql数据库中文乱码 2018年08月25日 20:55:15 可乐乐乐乐乐 阅读数:566 版本:CentOS6.8 python3.6.4 django1.8.2 数据库 ...
- django的mysql设置和mysql服务器闲置时间设置
服务器启动后,每个进程都会主动连接到mysql,要是长时间没有数据交互,mysql会自动断开连接. show variables like '%timeout%'; 闲置连接的超时时间由wait_t ...
- Django (2006, 'MySQL server has gone away') 本地重现与解决
最近我们的Django项目供Java Sofa应用进行tr调用时, 经常会出现一个异常: django.db.utils.OperationalError: (2006, 'MySQL server ...
- python django+bootstrap4+mysql智慧交通系统构建
之前,我做了一个实训的项目,但是一直没有展示如何做的,现在就让我讲解一下如何用django+bootstrap4+mysql实现这个智慧交通系统.这里用到的是网页的bootstrap4框架和mysql ...
- python基础[16]——解决django连接mysql数据库报错的问题
Models.py #创建数据表 from django.db import models from django.utils import timezone from tinymce.models ...
- [django]Django站点admin支持中文显示和输入设置
正文: Django站点admin支持中文输入设置,操作如下: 1 需要确定的你的数据库的client客户端和服务端的编码设置为utf-8,如果不是,请将其设置成utf-8编码,我采用mysql,详情 ...
随机推荐
- gitlab的备份与恢复与迁移
一.gitlab的备份1.1 创建备份目录,并授权 1 2 3 4 [root@linux-node1 ~]# mkdir /data/backups/gitlab -p [root@linux-no ...
- centos7.2 rabbitmq3.6.2源码部署
1.安装所有依赖包yum install -y gcc ncurses ncurses-base ncurses-devel ncurses-libs ncurses-static ncurses-t ...
- 搭建SVN+APACHE环境
项目需求 根据开发需求,建立svn环境,同时建立source.bd分支,source分支所有人都能访问,bd分支管理员kazihuo可访问.同时,在此基础上构建apache,以便于相关人员能通过浏览器 ...
- android edittext 获取焦点并弹出软键盘
editText.setFocusable(true); editText.setFocusableInTouchMode(true); editText.requestFocus(); activi ...
- MySQL数据库远程连接很慢的解决方案
在开发机器上链接mysql数据库很慢,但是在数据库服务器上直接链接数据库很快.猜测应该是远程链接解析的问题,在查询MySQL相关文档和网络搜索后,发现了一个配置似乎可以解决这样的问题,就是在MySQL ...
- Web Api问题汇总
在公网上布署Web Api的时候,不能调用,返回404 在web.config中 Adding the following to the web.config file worked for me: ...
- 使用Console命令调试JS
一.console 的对象常用的方法 1.console.log(object[, object, ...])使用频率最高的一条语句:向控制台输出一条消息.支持 C 语言 printf 式的格式化输出 ...
- 用Grub4dos引导,硬盘安装ArchLinux
本来在工作机上用winXP,最近想深入Linux开发,于是决定装个Linux.家里的archLinux + awesome用得很好, 于是决定在工作机上也装一套. 不想刻盘,也不想用U盘,通过Grub ...
- HDU 2571 命运 (入门dp)
题目链接 题意:二维矩阵,左上角为起点,右下角为终点,如果当前格子是(x,y),下一步可以是(x+1,y),(x,y+1)或者(x,y*k) ,其中k>1.问最大路径和. 题解:入门dp,注意负 ...
- Linux IO调度算法
Linux IO调度算法 操作系统的调度 CPU调度 CPU scheduler IO调度 IO scheduler IO调度器的总体目标是希望让磁头能够总是往一个方向移动,移 ...