详解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实现Linux的find命令实例分享
Jun 04 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
Jun 07 Python
pyhton列表转换为数组的实例
Apr 04 Python
python使用ddt过程中遇到的问题及解决方案【推荐】
Oct 29 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
Apr 04 Python
python处理自动化任务之同时批量修改word里面的内容的方法
Aug 23 Python
Python使用turtle库绘制小猪佩奇(实例代码)
Jan 16 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
Feb 17 Python
使用python绘制cdf的多种实现方法
Feb 25 Python
完美解决jupyter由于无法import新包的问题
May 26 Python
python神经网络学习 使用Keras进行回归运算
May 04 Python
Django中celery的使用项目实例
Jul 07 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
PHP 页面编码声明方法详解(header或meta)
2010/03/12 PHP
解析phpstorm + xdebug 远程断点调试
2013/06/20 PHP
php Session存储到Redis的方法
2013/11/04 PHP
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
十个优秀的Ajax/Javascript实例网站收集
2010/03/31 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
JavaScript字符串对象split方法入门实例(用于把字符串分割成数组)
2014/10/16 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
Vuex模块化实现待办事项的状态管理
2017/03/15 Javascript
微信小程序中多个页面传参通信的学习与实践
2017/05/05 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
2017/11/28 Javascript
react+redux的升级版todoList的实现
2017/12/18 Javascript
使用ngrok+express解决本地环境中微信接口调试问题
2018/02/26 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
[02:40]2018年度DOTA2最佳新人-完美盛典
2018/12/16 DOTA
六个窍门助你提高Python运行效率
2015/06/09 Python
Python优化技巧之利用ctypes提高执行速度
2016/09/11 Python
python如何定义带参数的装饰器
2018/03/20 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
pytorch 批次遍历数据集打印数据的例子
2019/12/30 Python
Clearly澳大利亚:购买眼镜、太阳镜和隐形眼镜
2018/04/26 全球购物
Ruby如何实现动态方法调用
2012/11/18 面试题
送餐员岗位职责范本
2014/02/21 职场文书
房屋继承公证书
2014/04/10 职场文书
三关爱志愿服务活动方案
2014/08/17 职场文书
2016年大学生暑期社会实践活动总结
2016/04/06 职场文书
教你怎么用python实现字符串转日期
2021/05/24 Python
SpringBoot SpringEL表达式的使用
2021/07/25 Java/Android
Python中可变和不可变对象的深入讲解
2021/08/02 Python
MySQL分布式恢复进阶
2022/07/23 MySQL