Python时间获取详解,Django获取时间详解,模板中获取时间详解(navie时间和aware时间)

1.Python获取到的时间

import pytz
from datetime import datetime
now = datetime.now()    # 这个时间为navie时间(自己不知道自己所处的时区)
print(now)
 
# 将时间转换为另一个时区的时间,此时会报错,因为此时的时间不知道自己所处的时区
# utc_timezone = pytz.timezone("UTC")
# now.astimezone(utc_timezone)
# >> ValueError: astimezone() cannot be applied to a naive datetime
 
# 先给时间指定时区,此时的时间变为aware时间(自己知道自己所处的时区)
now = now.replace(tzinfo=pytz.timezone("Asia/Shanghai"))
 
utc_timezone = pytz.timezone("UTC")     # 定义UTC的时区对象
utc_now = now.astimezone(utc_timezone)  # 将当前时间转换为UTC时区的时间
print(now)
print(utc_now)

2.Django项目下setting.py文件里

django.utils.timezone.now方法:会根据'setting.py'中设置的USE_TZ获取当前时间,
(USE_TZ=True会获取到一个aware时间,时区为UTC,USE_TZ=False,就会获取到一个navie时间)
django.utils.timezone.localtime方法:将一个aware时间,转换为本地时间('setting.py'中设置
的TIME_ZONE时区)
如果USE_TZ设置为False,那么Django获取到的当前时间就是一个navie时间,USE_TZ = True获取到的是
aware时间,且时区为UTC(因为Django ,now()函数的原因,和 python的now()函数不一样)
TIME_ZONE = 'Asia/Shanghai' 设置本地时间的时区
 
# 将UTC时间转换为本地时间
create_time = now()     # Django通过now()获取到的是UTC时间
localtime(create_time)

3.在Django模板中将一个UTC时间转换为本地时间

{% load tz %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
# 导入的tz 带有localtime过滤器,可以将时间转换为本地时间
{{ create_time | localtime }}
# localtime不写,也会自动转换,{{ create_time | localtime }}
</body>
</html>

4.在model.py文件中写

class Article(models.Model):
    # auto_now  每次save()保存数据的时候,都会更新当前时间,进数据库
    # auto_now_add  只在第一次添加数据的时候,会将当前时间保存进数据库
    title = models.CharField(max_length=200)
    create_time = models.DateTimeField(auto_now=True)
原文地址:https://www.cnblogs.com/apollo1616/p/10418761.html