详解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主机ip的简单实现方法
Apr 18 Python
R语言 vs Python对比:数据分析哪家强?
Nov 17 Python
Python使用Django实现博客系统完整版
Sep 29 Python
Python多线程中阻塞(join)与锁(Lock)使用误区解析
Apr 27 Python
解决nohup重定向python输出到文件不成功的问题
May 11 Python
Python高级特性与几种函数的讲解
Mar 08 Python
使用Filter过滤python中的日志输出的实现方法
Jul 17 Python
对Python函数设计规范详解
Jul 19 Python
django 通过url实现简单的权限控制的例子
Aug 16 Python
Python完全识别验证码自动登录实例详解
Nov 24 Python
Python While循环语句实例演示及原理解析
Jan 03 Python
python Django框架快速入门教程(后台管理)
Jul 21 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+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
zend api扩展的php对象的autoload工具
2011/04/18 PHP
header跳转和include包含问题详解
2012/09/08 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
php实现可逆加密的方法
2015/08/11 PHP
php开发微信支付获取用户地址
2015/10/04 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
从ThinkPHP3.2.3过渡到ThinkPHP5.0学习笔记图文详解
2019/04/03 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
JavaScript 继承详解 第一篇
2009/08/30 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
学习JavaScript设计模式(策略模式)
2015/11/26 Javascript
jq checkbox 的全选并ajax传参的实例
2017/04/01 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
详解Angular5 服务端渲染实战
2018/01/04 Javascript
NodeJs搭建本地服务器之使用手机访问的实例讲解
2018/05/12 NodeJs
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
2019/01/22 Javascript
[04:09]显微镜下的DOTA2第十二期—NaVi美如画的团战
2014/06/23 DOTA
[01:02:26]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第二场 1月18日
2021/03/11 DOTA
python各种语言间时间的转化实现代码
2016/03/23 Python
pandas中Timestamp类用法详解
2017/12/11 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
python tkinter实现连连看游戏
2020/11/16 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
REN Clean Skincare官网:英国本土有机护肤品牌
2019/02/23 全球购物
BudgetAir印度:预订航班、酒店和汽车租赁
2019/07/07 全球购物
如何利用XMLHTTP检测URL及探测服务器信息
2013/11/10 面试题
函授毕业生的自我鉴定
2013/11/26 职场文书
小学二年级语文教学反思
2016/03/03 职场文书
利用Apache Common将java对象池化的问题
2022/06/16 Servers