Django数据库中当前时间晚8小时问题
偶然发现Django项目中数据库中的当前时间比实际时间晚了8个小时。翻看了下源码发现,当前时间是用django.utlis.timezone.now()
函数获取的,这个函数和USE_TZ、TIME_ZONE两个配置有关。
如果没有配置USE_TZ,默认值为True。如果USE_TZ=True,最终调用time.gmtime()
获取UTC时间作为当前时间,这个时候TIME_ZONE不影响时间结果。
如果USE_TZ=False,则通过time.localtime()
获取时间,并根据os.environ["TZ']
的时区配置把计算偏移后的时间作为当前时间。django会根据TIME_ZONE配置修改这个环境变量。
如果USE_TZ=False且TIME_ZONE="Asia/Shanghai"则时间为北京时间没有问题;如果没有配置TIME_ZONE则默认为UTC时区,结果和USE_TZ=True相同。
如果需要在django shell中修改时区,可以在修改os.environ["TZ']
后执行time.tzset()
使新的时区生效。