TL;DR;
如何将 2016-01-01
转换为 Django 的 timezone
?收到来自表单的查询字符串参数后,想要获取该字符串并将其用作Django中的日期时间过滤器。 问题是,当将字符串转换为日期时间时,它没有成为感知日期时间,因此由于时区不同而丢失了几个小时。
例子:
from datetime import date
# Example from what I receive as GET querystring parameter
start_date, end_date = '15-01-2016', '16-01-2016'
DATE_FORMAT = '%Y-%m-%d'
start_date = start_date.split('-')
start_date = date(int(start_date[2]), int(start_date[1]), int(start_date[0]))
sd_filter = start_date.strftime(DATE_FORMAT)
end_date = end_date.split('-')
end_date = date(int(end_date[2]), int(end_date[1]), int(end_date[0]))
ed_filter = end_date.strftime(DATE_FORMAT)
#query
my_list = MyModel.objects.filter(created_at__range=(sd_filter, ed_filter))
问题出现在筛选器中。由于Django设置的时区问题,我浪费了几个小时。
更新:我不需要将datetime.now()转换为我的时间。我需要将一个字符串转换为datetime。
DateField()
吗?如果是,你可以直接将两个date
对象(start_date
和end_date
)传递给你的created_at__range=()
过滤器。 - gtlambertDateTimeField
,我尝试过这样做了...但它仍然缺少几个小时的 UTC。 - jarussi