详解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中合并两个文本文件并按照姓名首字母排序的例子
Apr 25 Python
python进阶教程之模块(module)介绍
Aug 30 Python
对python中return和print的一些理解
Aug 18 Python
python中numpy的矩阵、多维数组的用法
Feb 05 Python
python多进程读图提取特征存npy
May 21 Python
django中forms组件的使用与注意
Jul 08 Python
python 发送json数据操作实例分析
Oct 15 Python
浅谈tensorflow 中tf.concat()的使用
Feb 07 Python
python输出pdf文档的实例
Feb 13 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
Apr 22 Python
python全栈开发语法总结
Nov 22 Python
Python修改DBF文件指定列
Dec 19 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
手把手教你打印出PDF(关于fpdf的简单应用)
2013/06/25 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
JS启动应用程序的一个简单例子
2008/05/11 Javascript
JavaScript入门教程(3) js面向对象
2009/01/31 Javascript
引用外部js乱码问题分析及解决方案
2013/04/12 Javascript
extjs render 用法介绍
2013/09/11 Javascript
javascript间隔刷新的简单实例
2013/11/14 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
jQuery获取对象简单实现方法小结
2014/10/30 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
jquery移除了live()、die(),新版事件绑定on()、off()的方法
2016/10/26 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
微信小程序滚动Tab实现左右可滑动切换
2017/08/17 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
记一次vue-webpack项目优化实践详解
2019/02/17 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
Vue的data、computed、watch源码浅谈
2020/04/04 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)
2019/05/13 Python
python实现批量命名照片
2020/06/18 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
SQL注入攻击的种类有哪些
2013/12/30 面试题
Linux如何命名文件--使用文件名时应注意
2012/01/22 面试题
如何写贫困证明申请书
2014/10/29 职场文书
担保书范本
2015/01/20 职场文书
追悼会答谢词范文
2015/09/29 职场文书
详解Python类和对象内容
2021/06/22 Python
python字典进行运算原理及实例分享
2021/08/02 Python