详解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操作时间和日期之asctime()方法的使用
May 22 Python
Python 常用的安装Module方式汇总
May 06 Python
python决策树之CART分类回归树详解
Dec 20 Python
用python实现的线程池实例代码
Jan 06 Python
Python实现找出数组中第2大数字的方法示例
Mar 26 Python
pandas计数 value_counts()的使用
Jun 24 Python
opencv实现简单人脸识别
Feb 19 Python
python使用 request 发送表单数据操作示例
Sep 25 Python
Python批量安装卸载1000个apk的方法
Apr 10 Python
使用darknet框架的imagenet数据分类预训练操作
Jul 07 Python
python解决12306登录验证码的实现
Apr 18 Python
python语言中pandas字符串分割str.split()函数
Aug 05 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以ROOT权限执行系统命令的方法
2011/02/10 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
php实现过滤UBB代码的类
2015/03/12 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
php生成酷炫的四个字符验证码
2016/04/22 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
MSN消息提示类
2006/09/05 Javascript
一个判断email合法性的函数[非正则]
2008/12/09 Javascript
基于javascript如何传递特殊字符
2015/11/30 Javascript
JavaScript常用基础知识强化学习
2015/12/09 Javascript
基于jquery实现省市区三级联动效果
2015/12/25 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
基于jQuery实现的单行公告活动轮播效果
2017/08/23 jQuery
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
原生javascript实现连连看游戏
2019/01/03 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
跟老齐学Python之坑爹的字符编码
2014/09/28 Python
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
用python找出那些被“标记”的照片
2017/04/20 Python
在Python的一段程序中如何使用多次事件循环详解
2017/09/07 Python
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
python实现大文件分割与合并
2019/07/22 Python
基于python+selenium的二次封装的实现
2020/01/06 Python
Python3爬虫里关于代理的设置总结
2020/07/30 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
美国购买汽车零件网站:Buy Auto Parts
2018/04/02 全球购物
Tommy Hilfiger美国官网:美国高端休闲领导品牌
2019/01/14 全球购物
HashMap和Hashtable的区别
2013/05/18 面试题
人力资源总监工作说明
2014/03/03 职场文书
争先创优心得体会
2014/09/12 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书