经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
详解django2中关于时间处理策略
来源:jb51  时间:2019/3/6 10:34:17  对本文有异议

一、django中数据模型关于时间字段的认识

1、 DateField :可以记录年月日,映射到数据库是 date 类型

2、 DateTimeField :可以记录年月日时分秒,映射到数据库是 datetime 类型

3、 TimeField :可以记录时分秒,映射到数据库是 time 类型

二、关于 navie 时间和 aware 时间的认识

navie时间和aware时间

  • navie没有指定时区的,不知道自己的时间。
  • aware指定了时区,知道自己的时间。

pytz库:专门用来处理时区的库,经常更新一些时区的数据

astimezone方法

将一个时区的时间转换为另一个时区的时间,这个方法只能被'aware'类型的时间调用,

不能被'navie'类型的时间调用

  1. import pytz
  2. from datetime import datetime
  3. now = datetime.now() #这是一个navie类型的时间
  4. utc_timezone = pytz.timezone('UTC') #定义UTC的时区对象
  5. utc_now = now.astimezone(utc_timezone) #将当前时区时间转换为UTC时区的时间
  6. >> ValueError: astimezone() cannot be applied to a navie datetime
  7. # 会抛出一个异常,原因就是因为navie类型的时间不能调用astimezone方法
  8.  
  9. now = now.replace(tzinfo=pytz.timezone('Asia/Shanghai'))
  10. utc_now = now.astimezone(utc_timezone)
  11. #这时候就可以进行时区的转换
  12.  
  13. #更改时间

三、在 django 中正确的使用时间

1、在 settings.py 中配置

  1. TIME_ZONE = 'Asia/Shanghai' # 时区的选择
  2. # 如果USE_TZ=False,那么django获取到的当前时间就是一个navie类型的时间,
  3. # 网上很多资料写的是设置False,但是实际开发过程中设置True
  4. USE_TZ = True

2、在一个 app 的数据模型中创建时间的字段

  1. from django.db import models
  2.  
  3.  
  4. class ArticleModel(models.Model):
  5. """
  6. 文章的模型
  7. """
  8. title = models.CharField(max_length=100, verbose_name='文章标题')
  9. create_time = models.DateTimeField(verbose_name='文章创建时间')
  10.  
  11. class Meta(object):
  12. db_table = 'article'
  13.  
  14. def __str__(self):
  15. return '<ArticleModel>({}, {})'.format(self.title, self.create_time)

3、在视图类中手动的添加一条数据

  1. from django.shortcuts import render
  2. from django.views import View
  3. # 引入模块
  4. from django.utils.timezone import now, localtime
  5. from . import models
  6.  
  7.  
  8. class ArticleView(View):
  9. """
  10. 文章的视图类
  11. """
  12.  
  13. def get(self, request, *args, **kwargs):
  14. models.ArticleModel.objects.create(title='第一篇文章', create_time=now())
  15. return render(request, 'article.html')

4、查看数据库数据

实际上我这是差不多下午13点了,刚好相差8小时

5、查询出来的数据使用 localtime 函数转换为本地时间

  1. from django.shortcuts import render
  2. from django.views import View
  3. # 引入模块
  4. from django.utils.timezone import now, localtime
  5. from . import models
  6.  
  7.  
  8. class ArticleView(View):
  9. """
  10. 文章的视图类
  11. """
  12.  
  13. def get(self, request, *args, **kwargs):
  14. result = models.ArticleModel.objects.get(pk=1)
  15. print(result)
  16. print(localtime(result.create_time))
  17. return render(request, 'article.html')

6、在模板( html )中使用(自己会转换为你电脑本地时区的时间)

  1. <p>{{ article.title }}</p>
  2. <p>{{ article.create_time }}</p>
  3. <!--直接使用django内置过滤器格式化数据-->
  4. <p>{{ article.create_time | date:"Y-m-d H:i:s" }}</p>

7、如果你在 settings.pyTIME_ZONE = 'Asia/Shanghai' 配置不同的时区,在用户页面展示的结果也会不一样的。

四、在django中数据模型使用时间字段

1、使用字段

  1. create_time = models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')
  2. update_time = models.DateTimeField(auto_now=True, null=True, verbose_name='修改时间')

2、关于auto_now_add的认识

auto_now_add会在第一次添加数据的时候自动获取当前时间

3、关于auto_now的认识

auto_now会在每次对象调用save方法的时候更新为当前时间

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持w3xue。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号