客户端正确过滤日期时间UTC字段

时间:2017-09-21 23:09:16

标签: django date datetime timezone

我有一个Django API,我希望按日期过滤 DateTimeField 。我以UTC格式将所有内容存储在数据库中。

date_created = DateTimeField(auto_add=now)
  

例如:前端的用户在日期选择器中选择日期:09/22/2017(   我发送到django作为2017-09-22)我想过滤掉每一个   记录这个日期的数量少于或等于。

client_date= request.POST.get('client_date')
books = Books.object.filter(date_created__lte=client_date)

但是这个日期,我不是在UTC中过滤,而且我没有得到正确的结果,我需要以某种方式将client_date转换为来自'America / Chicago'的UTC格式,但我不知道如何

1 个答案:

答案 0 :(得分:0)

我认为来自django documentation的信息有助于您的事业。

当启用对时区的支持时,Django将日期时间信息以UTC格式存储在数据库中,在内部使用时区感知日期时间对象,并将它们转换为模板和表单中最终用户的时区。

如果您的用户居住在多个时区,并且您希望根据每个用户的挂钟显示日期时间信息,则非常方便。

即使您的网站仅在一个时区可用,在数据库中仍然在UTC中存储数据的良好做法。主要原因是夏令时(DST)。许多国家都有DST系统,其中时钟在春季向前移动,在秋季向后移动。如果您在当地工作,那么当转换发生时,您可能每年会遇到两次错误。 (pytz文档更详细地讨论了这些问题。)这可能对您的博客无关紧要,但如果您每年一年两次,每年两次向您的客户收取超额费用或低额费用,则会出现问题。 此问题的解决方案是在代码中使用UTC,并仅在与最终用户交互时使用本地时间

默认情况下禁用时区支持。要启用它,请在设置文件中设置 USE_TZ = True 。时区支持使用pytz,它是在安装Django时安装的。