详解django2中关于时间处理策略


Posted in Python onMarch 06, 2019

一、django中数据模型关于时间字段的认识

1、 DateField :可以记录年月日,映射到数据库是 date 类型

2、 DateTimeField :可以记录年月日时分秒,映射到数据库是 datetime 类型

3、 TimeField :可以记录时分秒,映射到数据库是 time 类型

二、关于 navie 时间和 aware 时间的认识

navie时间和aware时间

  • navie没有指定时区的,不知道自己的时间。
  • aware指定了时区,知道自己的时间。

pytz库:专门用来处理时区的库,经常更新一些时区的数据

astimezone方法

将一个时区的时间转换为另一个时区的时间,这个方法只能被'aware'类型的时间调用,

不能被'navie'类型的时间调用

import pytz
from datetime import datetime
now = datetime.now() #这是一个navie类型的时间
utc_timezone = pytz.timezone('UTC') #定义UTC的时区对象
utc_now = now.astimezone(utc_timezone) #将当前时区时间转换为UTC时区的时间
>> ValueError: astimezone() cannot be applied to a navie datetime
# 会抛出一个异常,原因就是因为navie类型的时间不能调用astimezone方法

now = now.replace(tzinfo=pytz.timezone('Asia/Shanghai'))
utc_now = now.astimezone(utc_timezone)
#这时候就可以进行时区的转换

#更改时间

三、在 django 中正确的使用时间

1、在 settings.py 中配置

TIME_ZONE = 'Asia/Shanghai' # 时区的选择
# 如果USE_TZ=False,那么django获取到的当前时间就是一个navie类型的时间,
# 网上很多资料写的是设置False,但是实际开发过程中设置True
USE_TZ = True

2、在一个 app 的数据模型中创建时间的字段

from django.db import models


class ArticleModel(models.Model):
 """
 文章的模型
 """
 title = models.CharField(max_length=100, verbose_name='文章标题')
 create_time = models.DateTimeField(verbose_name='文章创建时间')

 class Meta(object):
 db_table = 'article'

 def __str__(self):
 return '<ArticleModel>({}, {})'.format(self.title, self.create_time)

3、在视图类中手动的添加一条数据

from django.shortcuts import render
from django.views import View
# 引入模块
from django.utils.timezone import now, localtime
from . import models


class ArticleView(View):
 """
 文章的视图类
 """

 def get(self, request, *args, **kwargs):
 models.ArticleModel.objects.create(title='第一篇文章', create_time=now())
 return render(request, 'article.html')

4、查看数据库数据

实际上我这是差不多下午13点了,刚好相差8小时

详解django2中关于时间处理策略

5、查询出来的数据使用 localtime 函数转换为本地时间

from django.shortcuts import render
from django.views import View
# 引入模块
from django.utils.timezone import now, localtime
from . import models


class ArticleView(View):
 """
 文章的视图类
 """

 def get(self, request, *args, **kwargs):
 result = models.ArticleModel.objects.get(pk=1)
 print(result)
 print(localtime(result.create_time))
 return render(request, 'article.html')

6、在模板( html )中使用(自己会转换为你电脑本地时区的时间)

<p>{{ article.title }}</p>
<p>{{ article.create_time }}</p>
<!--直接使用django内置过滤器格式化数据-->
<p>{{ article.create_time | date:"Y-m-d H:i:s" }}</p>

7、如果你在 settings.pyTIME_ZONE = 'Asia/Shanghai' 配置不同的时区,在用户页面展示的结果也会不一样的。

四、在django中数据模型使用时间字段

1、使用字段

create_time = models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')

2、关于auto_now_add的认识

auto_now_add会在第一次添加数据的时候自动获取当前时间

3、关于auto_now的认识

auto_now会在每次对象调用save方法的时候更新为当前时间

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python多线程编程(七):使用Condition实现复杂同步
Apr 05 Python
Python使用bs4获取58同城城市分类的方法
Jul 08 Python
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 Python
实例讲解Python设计模式编程之工厂方法模式的使用
Mar 02 Python
深入理解python中的atexit模块
Mar 07 Python
Python实现扣除个人税后的工资计算器示例
Mar 26 Python
python 判断三个数字中的最大值实例代码
Jul 24 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
Feb 26 Python
Django+Uwsgi+Nginx如何实现生产环境部署
Jul 31 Python
python实现xml转json文件的示例代码
Dec 30 Python
python超详细实现完整学生成绩管理系统
Mar 17 Python
Django使用AJAX调用自己写的API接口的方法
Mar 06 #Python
Django+Xadmin构建项目的方法步骤
Mar 06 #Python
Python中最大递归深度值的探讨
Mar 05 #Python
Python小进度条显示代码
Mar 05 #Python
Python嵌套式数据结构实例浅析
Mar 05 #Python
Python字典遍历操作实例小结
Mar 05 #Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
Mar 05 #Python
You might like
Memcached常用命令以及使用说明详解
2013/06/27 PHP
firefo xml 读写实现js代码
2009/06/11 Javascript
JavaScript 函数调用规则
2009/09/14 Javascript
js 3种归并操作的实例代码
2013/10/30 Javascript
jQuery Masonry瀑布流插件使用详解
2014/11/17 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
Bootstrap 3的box-sizing样式导致UEditor控件的图片无法正常缩放的解决方案
2016/09/15 Javascript
Angular表单验证实例详解
2016/10/20 Javascript
jquery仿ps颜色拾取功能
2017/03/08 Javascript
微信小程序实现倒计时补零功能
2018/07/09 Javascript
AngularJS使用$http配置对象方式与服务端交互方法
2018/08/13 Javascript
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
2020/02/11 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
JS实现无限轮播无倒退效果
2020/09/21 Javascript
[54:02]2018DOTA2亚洲邀请赛 4.1 小组赛 B组 IG vs VGJ.T
2018/04/03 DOTA
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
python语音识别实践之百度语音API
2018/08/30 Python
python使用MQTT给硬件传输图片的实现方法
2019/05/05 Python
简单了解django缓存方式及配置
2019/07/19 Python
谈谈python垃圾回收机制
2020/09/27 Python
CSS3伪类选择器:nth-child()
2009/04/02 HTML / CSS
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
家佳咖啡店创业计划书
2013/12/27 职场文书
军训学生自我鉴定
2014/02/12 职场文书
产品生产计划书
2014/05/07 职场文书
公司年底活动方案
2014/08/17 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
2015年安全生产管理工作总结
2015/05/25 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
MySQL 语句执行顺序举例解析
2022/06/05 MySQL
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS