一、django
中数据模型关于时间字段的认识
- 1、
DateField
:可以记录年月日,映射到数据库是date
类型 - 2、
DateTimeField
:可以记录年月日时分秒,映射到数据库是datetime
类型 - 3、
TimeField
:可以记录时分秒,映射到数据库是time
类型
二、关于navie
时间和aware
时间的认识详细查看
三、在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小时
-
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') 复制代码
# 返回结果 <ArticleModel>(第一篇文章, 2019-02-28 04:56:43.296133+00:00) 2019-02-28 12:56:43.296133+08:00 复制代码
-
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.py
中TIME_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
方法的时候更新为当前时间