1、navie时间和aware时间?
navie时间:不知道自己是哪个时区的幼稚时间
aware时间:清醒的知道自己是哪个时区的时间
2、pytz库?
在python中用来处理时区时间的库,下面简介这个库里面的几个方法:
pytz.timezone('时区'):定义一个时区信息,例如定义一个中国时区就可以使用:
c_tz = pytz.timezone('Asia/Shanghai')
3、replace方法:
可以替代时间元祖中各个元素的方法,当然也可以用来指定当前时间的时区信息:
from datetime import datetime
now = datetime.now() # datetime中的时间是一个navie时间
asia_now = now.replace(tzinfo=pytz.timezone('Asia/Shanghai')) # 时间被转换成aware时间
4、astimezone方法:
可以将一个时区的时间转换成另一个时区的时间,前提是这个被转换的时间必须是一个aware时间,使用方式如下:
utc_tz = pytz.timezone('UTC') # 定义一个时区的实例
from datetime import datetime
now = datetime.now() # datetime中的时间是一个navie时间
asia_now = now.replace(tzinfo=pytz.timezone('Asia/Shanghai')) # 时间被转换成aware时间
utc_now = asia_now.astimezone(utc_tz) # 把一个中国时区的时间转换成utc时区时间
5、在Django中使用aware时间:
首先,在setting.py文件中设置:
USE_TZ=True
使用from django.utils.timezone import now中的now作为当前时间,源码如下:
def now():
"""
Return an aware or naive datetime.datetime, depending on settings.USE_TZ.
"""
if settings.USE_TZ:
# timeit shows that datetime.now(tz=utc) is 24% slower
return datetime.utcnow().replace(tzinfo=utc)
else:
return datetime.now()
此时,从now的定义中你就可以知道只要在setting.py文件中设置了USE_TZ=True,此时的now就是一个aware时间