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.

django pytz CST
阅读(4322) 评论(2) 2014-03-17
yibuyisheng :
老楠,哈哈,不错不错!我正在做你在宝钢留下的项目。。。。
老楠 回复 yibuyisheng :
新同事?
输入类似这样的地址 "name@something.com"
输入类似这样的地址"http://someaddress.com"
验证码 不区分大小写(看不清)