【发布时间】:2013-11-23 21:36:57
【问题描述】:
在我的应用程序中,我使用时区 (USE_TZ=True),并且我在代码中创建的所有日期都知道 UTC datetime 对象(我使用 django.util.timezone.now 作为当前日期,并使用以下辅助函数来确保所有我的例子中的日期是我所期望的:)
@classmethod
def asUTCDate(cls, date):
if not timezone.is_aware(date):
return timezone.make_aware(date, timezone.utc)
return date.replace(tzinfo=timezone.utc)
我还使用这个 sn-p 强制检查幼稚/感知日期(如文档中建议的那样):
import warnings
warnings.filterwarnings(
'error', r"DateTimeField .* received a naive datetime",
RuntimeWarning, r'django\.db\.models\.fields')
据我所知,这是正确的方法(这是来自 django 文档的引用:"解决此问题的方法是在代码中使用 UTC 并仅使用本地时间与最终用户交互时。"),似乎我的应用程序处理日期非常好......但我刚刚针对使用 Django 1.6 __hour 的模型实现了一个过滤器和它根据用户时区强制提取,结果类似于:
django_datetime_extract('hour', "object"."date", Europe/Rome) = 15
但这会破坏我的查询,因为我期望的一些结果不包含在集合中,但是当我使用__range 在日期之间搜索时,它似乎按预期工作(返回日期范围内的对象)…所以在我看来,Django 在查询中只考虑__hour 过滤器的时区…但我不明白为什么…我假设除了在显示日期格式化的模板中之外,UTC 无处不在用户 tz,但也许这不是真的。
所以我的问题是:我使用时区的方式对吗? __hour 过滤器是错误的还是什么?
【问题讨论】:
标签: django date datetime timezone