详解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字符和字符值(ASCII或Unicode码值)转换方法
May 21 Python
python字典基本操作实例分析
Jul 11 Python
python使用RNN实现文本分类
May 24 Python
详解python3中tkinter知识点
Jun 21 Python
Python面向对象进阶学习
May 21 Python
如何利用python给图片添加半透明水印
Sep 06 Python
python定间隔取点(np.linspace)的实现
Nov 27 Python
python opencv如何实现图片绘制
Jan 19 Python
Django中Q查询及Q()对象 F查询及F()对象用法
Jul 09 Python
Python操作Elasticsearch处理timeout超时
Jul 17 Python
python unichr函数知识点总结
Dec 16 Python
Github 使用python对copilot做些简单使用测试
Apr 14 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/12/21 PHP
Memcache 在PHP中的使用技巧
2010/02/08 PHP
Zend Framework页面缓存实例
2014/06/25 PHP
PHP封装的字符串加密解密函数
2015/12/18 PHP
PHP打印输出函数汇总
2016/08/28 PHP
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
2012/12/19 Javascript
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
AngularJS使用ngOption实现下拉列表的实例代码
2016/01/23 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
jQuery事件委托之Safari
2016/07/05 Javascript
AngularJS基础 ng-keyup 指令简单示例
2016/08/02 Javascript
Angular2.js实现表单验证详解
2017/06/23 Javascript
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
nodejs多版本管理总结
2018/04/03 NodeJs
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
JS如何实现封装列表右滑动删除收藏按钮
2020/07/23 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
[02:49]2018DOTA2亚洲邀请赛主赛事决赛日战况回顾 Mineski鏖战5局夺得辉耀
2018/04/10 DOTA
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
2017/11/09 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
2018/04/20 Python
python3+PyQt5实现自定义窗口部件Counters
2018/04/20 Python
Python简单获取二维数组行列数的方法示例
2018/12/21 Python
Python制作exe文件简单流程
2019/01/24 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
django rest framework 自定义返回方式
2020/07/12 Python
实习护理工作自我评价
2013/09/25 职场文书
人事档案接收函
2014/01/12 职场文书
《桂花雨》教学反思
2014/04/12 职场文书
社区党风廉政建设调研报告
2015/01/01 职场文书
自主招生专家推荐信
2015/03/26 职场文书
跑吧孩子观后感
2015/06/10 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
2016开学第一课心得体会
2016/01/23 职场文书
如何制作自己的原生JavaScript路由
2021/05/05 Javascript