关于Django的TIME_ZONE时区问题的若干总结

来源:互联网 发布:肝脏再造术的真假知乎 编辑:程序博客网 时间:2024/05/22 06:41

在Django1.6的settings.py文件中有TIME_ZONE和USE_TZ两个参数来描述时区的设置。

TIME_ZONE:用于存放本地时区信息,默认值为UTC,意思为采用国际标准时间“格林尼治时间”。中国处于东八区,官方文档上有两个取值“Asia/Shanghai”和“Asia/Chongqing”(没有北京).

USE_TZ:用于控制是否使用UTC时间(True and False)。如果设置为False,则使用本地时间。

为了保证世界各地时间统一性,可以在数据库中使用UTC时间,根据需求转换成相应时区时间。


在timezone模块里有两个函数:

[python] view plain copy
  1. <span style="font-size:18px;">def make_aware(value, timezone):  
  2.     """ 
  3.     Makes a naive datetime.datetime in a given time zone aware. 
  4.     """  
  5.     if hasattr(timezone, 'localize'):  
  6.         # available for pytz time zones  
  7.         return timezone.localize(value, is_dst=None)  
  8.     else:  
  9.         # may be wrong around DST changes  
  10.         return value.replace(tzinfo=timezone)</span>  
[python] view plain copy
  1. <span style="font-size:18px;">def make_naive(value, timezone):  
  2.     """ 
  3.     Makes an aware datetime.datetime naive in a given time zone. 
  4.     """  
  5.     value = value.astimezone(timezone)  
  6.     if hasattr(timezone, 'normalize'):  
  7.         # available for pytz time zones  
  8.         value = timezone.normalize(value)  
  9.     return value.replace(tzinfo=None)</span>  


这里的naive表示是否已知时区,即tzinfo是否为None,make_aware函数根据指定的时区将模糊时间转换成相应时区的时间,make_naive正好相反。



如何修改为当地时区:

# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-Hans'


# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'