Django中,当"Asia/Shanghai"变成"CST"
下午发现一个问题,通过filter查找数据时,找不到了,但数据库里明明是有的。
Something.objects.select_related().filter(create_datetime__year=year, create_datetime__month=month)
settings.py的设置为
TIME_ZONE = Asia/Shanghai
USE_TZ = True
搞半天不得其解,重建mysql timezone table,重设linux时区,blabla。。。无效。
追踪sql语句:
...EXTRACT(MONTH FROM CONVERT_TZ(`Sometable`.`create_datetime`, 'UTC', 'CST'))....
有点怀疑,但是CST也可以算是中国标准时间,一查如下:
Central Standard Time (USA) UT-6:00
Central Standard Time (Australia) UT+9:30
China Standard Time UT+8:00
Cuba Standard Time UT-4:00
CST可以同时表示美国,澳大利亚,中国,古巴四个国家的标准时间,WTF,坑爹啊。。。
启动django shell,输入:
>>> from django.utils import timezone
>>> timezone.get_current_timezone_name()
'CST'
果然。。。但是为什么mysql里就是没数据呢?试着在sql语句中把CST改成Asia/Shanghai,直接执行,数据出来了。查看django源码,遍地都是pytz,自己测试了一下:
>>> import pytz
Traceback (most recent call last):
File "", line 1, in
ImportError: No module named pytz
说多了都是泪,一行easy_install pytz,everything is ok.