详解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的Flask框架中实现全文搜索功能
Apr 20 Python
以视频爬取实例讲解Python爬虫神器Beautiful Soup用法
Jan 20 Python
Python向日志输出中添加上下文信息
May 24 Python
python读取excel表格生成erlang数据
Aug 26 Python
Python线程同步的实现代码
Oct 03 Python
Python 中Django验证码功能的实现代码
Jun 20 Python
Python求均值,方差,标准差的实例
Jun 29 Python
python可视化篇之流式数据监控的实现
Aug 07 Python
python 字符串常用方法汇总详解
Sep 16 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
Mar 05 Python
Python求两个字符串最长公共子序列代码实例
Mar 05 Python
教你怎么用Python监控愉客行车程
Apr 29 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
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
浅谈javascript原型链与继承
2015/07/13 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
2015/07/30 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
详解vuex 中的 state 在组件中如何监听
2017/05/23 Javascript
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
[原创]jquery判断元素内容是否为空的方法
2018/05/04 jQuery
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
Jquery实现无缝向上循环滚动列表的特效
2019/02/13 jQuery
js实现带搜索功能的下拉框
2020/01/11 Javascript
解决Vue-Router升级导致的Uncaught (in promise)问题
2020/08/07 Javascript
javascript实现搜索筛选功能实例代码
2020/11/12 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
简单介绍Python中的JSON模块
2015/04/08 Python
Numpy 中的矩阵求逆实例
2019/08/26 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
详解Python3 pickle模块用法
2019/09/16 Python
Python Selenium安装及环境配置的实现
2020/03/17 Python
手机端用rem+scss做适配的详解
2017/11/15 HTML / CSS
C#怎么让一个窗口居中显示?
2015/10/20 面试题
电气专业应届生求职信
2013/11/01 职场文书
办公室驾驶员岗位职责
2013/11/15 职场文书
人力资源管理专业求职信
2014/07/23 职场文书
安全施工责任书
2014/08/25 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书
小学音乐课歌曲《堆雪人》教学反思
2016/02/18 职场文书
某某幼儿园的教育教学管理调研分析报告
2019/11/29 职场文书