详解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 相关文章推荐
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
python中hashlib模块用法示例
Oct 30 Python
python机器学习之神经网络(二)
Dec 20 Python
sublime python3 输入换行不结束的方法
Apr 19 Python
selenium+python自动化测试之页面元素定位
Jan 23 Python
Python3数字求和的实例
Feb 19 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
django框架两个使用模板实例
Dec 11 Python
Python tkinter和exe打包的方法
Feb 05 Python
文件上传服务器-jupyter 中python解压及压缩方式
Apr 22 Python
关于keras中keras.layers.merge的用法说明
May 23 Python
python实现Nao机器人的单目测距
Sep 04 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简介
2006/10/09 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
ecshop添加菜单及权限分配问题
2017/11/21 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
PHP通过文件保存和更新信息的方法分析
2019/09/12 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
将Datatable转化成json发送前台实现思路
2013/09/06 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
浅谈Sticky组件的改进实现
2016/03/22 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
2017/02/18 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
详解利用 Express 托管静态文件的方法
2017/09/18 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
JavaScript常见继承模式实例小结
2019/01/11 Javascript
浅谈js闭包理解
2019/04/01 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python获取文件真实链接的方法,针对于302返回码
2018/05/14 Python
python验证身份证信息实例代码
2019/05/06 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
2020/02/26 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
如何进行有效的自我评价
2013/09/27 职场文书
大学班级计划书
2014/04/29 职场文书
拉歌口号大全
2014/06/13 职场文书
2014年党员自我评议(5篇)
2014/09/12 职场文书
2016年小学圣诞节活动总结
2016/03/31 职场文书
导游词之日本富士山
2020/01/06 职场文书
JavaCV实现照片马赛克效果
2022/01/22 Java/Android