详解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简单爬虫导出CSV文件的实例讲解
Jul 06 Python
python3.6使用urllib完成下载的实例
Dec 19 Python
Django保护敏感信息的方法示例
May 09 Python
Python实现网页截图(PyQT5)过程解析
Aug 12 Python
python同步windows和linux文件
Aug 29 Python
python IDLE添加行号显示教程
Apr 25 Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 Python
Python 开发工具通过 agent 代理使用的方法
Sep 27 Python
django使用channels实现通信的示例
Oct 19 Python
python递归函数用法详解
Oct 26 Python
pytorch fine-tune 预训练的模型操作
Jun 03 Python
python基础之类属性和实例属性
Oct 24 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弹出错误警告函数扩展性强
2014/01/17 PHP
浅谈php函数serialize()与unserialize()的使用方法
2014/08/19 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
比较详细的javascript对象的property和prototype是什么一种关系
2007/08/06 Javascript
Jquery动态进行图片缩略的原理及实现
2013/08/13 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
jQuery子元素过滤选择器用法示例
2016/09/09 Javascript
深入理解javascript函数参数与闭包
2016/12/12 Javascript
BootStrap导航栏问题记录
2017/07/31 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
[02:29]DOTA2英雄基础教程 陈
2013/12/17 DOTA
[38:21]2018DOTA2亚洲邀请赛3月30日 小组赛A组 LGD VS Newbee
2018/03/31 DOTA
[01:14:55]EG vs Spirit Supermajor 败者组 BO3 第三场 6.4
2018/06/05 DOTA
python设置检查点简单实现代码
2014/07/01 Python
Python的dict字典结构操作方法学习笔记
2016/05/07 Python
python利用urllib实现爬取京东网站商品图片的爬虫实例
2017/08/24 Python
Python内置函数delattr的具体用法
2017/11/23 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
python实现简单图书管理系统
2019/11/22 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
公益活动策划方案
2014/01/09 职场文书
商务英语广告词大全
2014/03/18 职场文书
医药营销个人求职信
2014/04/12 职场文书
公司委托书怎么写
2014/08/02 职场文书
教师考核表个人总结
2015/02/12 职场文书
2015年调度员工作总结
2015/04/30 职场文书
工作简报怎么写
2015/07/21 职场文书
只用20行Python代码实现屏幕录制功能
2021/06/02 Python
Java设计模式中的命令模式
2022/04/28 Java/Android
NoSQL优缺点与MongoDB数据库简介
2022/06/05 MongoDB