项目的相关配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': name,
'USER': user,
'PASSWORD': pwd,
'HOST': host,
'PORT': port,
}
}
LANGUAGE_CODE = 'zh-CN'
TIME_ZOnE= 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
在 view 里面写的查询语句:
now = timezone.now()
query = models.AllItem.objects.filter(add_time__day=now.day)
print query.count()
生成的 sql :
SELECT COUNT(*) AS `__count` FROM `allitem` WHERE EXTRACT(DAY FROM CONVERT_TZ(`allitem`.`add_time`, 'UTC', 'Asia/Shanghai')) = 5
疑问:
1.now 是用 timezone.now()获取的,这时 now 已经是 utc 时间
2.由于配置中 USE_TZ 设置为 True ,那么保存在 add_time 里的时间也是 utc 时间( add time 在 model 中设置为 auto now add 为 True )
那么,为什么在执行查询的时候, django 还要使用 CONVERT_TZ 函数去转换时间?导致我查询的结果都是错误的。
真心求教真相。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': name,
'USER': user,
'PASSWORD': pwd,
'HOST': host,
'PORT': port,
}
}
LANGUAGE_CODE = 'zh-CN'
TIME_ZOnE= 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = True
在 view 里面写的查询语句:
now = timezone.now()
query = models.AllItem.objects.filter(add_time__day=now.day)
print query.count()
生成的 sql :
SELECT COUNT(*) AS `__count` FROM `allitem` WHERE EXTRACT(DAY FROM CONVERT_TZ(`allitem`.`add_time`, 'UTC', 'Asia/Shanghai')) = 5
疑问:
1.now 是用 timezone.now()获取的,这时 now 已经是 utc 时间
2.由于配置中 USE_TZ 设置为 True ,那么保存在 add_time 里的时间也是 utc 时间( add time 在 model 中设置为 auto now add 为 True )
那么,为什么在执行查询的时候, django 还要使用 CONVERT_TZ 函数去转换时间?导致我查询的结果都是错误的。
真心求教真相。
