详解django2中关于时间处理策略

作者:水痕001 时间:2021-09-09 23:13:09 

一、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方法的时候更新为当前时间

来源:https://juejin.im/post/5c7e1734f265da2dc2320a30

标签:django2,时间
0
投稿

猜你喜欢

  • Golang如何实现任意进制转换的方法示例

    2024-02-23 07:43:48
  • Python+folium绘制精美地图的示例详解

    2023-07-26 13:17:06
  • Python numpy大矩阵运算内存不足如何解决

    2022-08-06 22:38:21
  • 详解PHP中数组函数的知识点

    2023-05-29 10:59:11
  • django queryset 去重 .distinct()说明

    2022-10-12 01:01:00
  • 在ASP.NET 2.0中操作数据之五十二:使用FileUpload上传文件

    2023-07-07 04:19:18
  • Python动态加载模块的3种方法

    2023-12-22 21:33:29
  • Docker容器启动时初始化Mysql数据库的方法

    2024-01-19 12:16:36
  • 在Windows系统上搭建Nginx+Python+MySQL环境的教程

    2024-01-24 08:04:40
  • Python利用matplotlib.pyplot.boxplot()绘制箱型图实例代码

    2022-11-18 05:08:26
  • Python数据分析之缺失值检测与处理详解

    2021-10-04 01:09:08
  • MsSql 存储过程分页代码 [收集多篇]

    2024-01-13 13:13:33
  • 页面嵌入Windows Media Player播放器代码需要注意的

    2023-07-02 17:04:48
  • 详解Ubuntu环境下部署Django+uwsgi+nginx总结

    2021-06-15 06:23:43
  • Vue3源码分析组件挂载初始化props与slots

    2023-07-02 16:45:37
  • Go简单实现协程池的实现示例

    2024-02-19 07:35:16
  • CSS 几条经典的 CSS Tips

    2008-08-20 18:40:00
  • Python 数据可视化实现5种炫酷的动态图

    2023-07-22 10:46:14
  • vue3 watch和watchEffect的使用以及有哪些区别

    2024-05-05 09:11:09
  • 代码讲解Python对Windows服务进行监控

    2023-10-07 10:59:09
  • asp之家 网络编程 m.aspxhome.com