【问题标题】:SQL Where Clause and Django TimezoneSQL Where 子句和 Django 时区
【发布时间】:2017-04-05 09:07:57
【问题描述】:

我注意到,当我使用以下命令从 SQL 数据库返回记录时:the_records = records.objects.filter(datetime__contains="2015-01-15"),我返回了错误的记录,因为时区以某种方式影响了函数调用 - 我知道这一点是因为如果我暂时禁用时区,返回正确的记录。任何人都可以就我应该如何解决这个问题提供帮助(我仍然需要使用时区)。

问候,马克

【问题讨论】:

    标签: python django sqlite datetime timezone


    【解决方案1】:

    我假设 datetime 是一个 Django DateTime 字段,并且您正在尝试获取值与日期“2015-01-15”匹配的结果,而忽略实际时间。

    在这种情况下,您可能想要进行date 查询,例如:Records.objects.filter(datetime__date=datetime.date(2015, 1, 15))

    【讨论】:

      【解决方案2】:

      如果您需要使用时区特定日期查询您的数据库,您可以创建一个知道其时区的 datetime 对象。

      例子:

      # Get your timezone
      from django.utils import timezone
      my_timezone = timezone.get_current_timezone()
      
      
      # Get create your timezone aware datetime object
      from datetime import datetime
      query_date = datetime(2015,01,15).replace(tzinfo=my_timezone)
      
      
      # now you can run your query with a timezone specific datetime object
      the_records = records.objects.filter(datetime=query_date)
      

      这应该可以解决您的问题并为您提供所需的准确结果。 如果您还有任何问题,请告诉我。

      如果您有兴趣了解更多信息,此link 有更多与 django 时区相关的信息。

      【讨论】:

      • 谢谢帕特里克,但这段代码没有给我日期,当我只提取日期部分并用它来过滤我的记录时,我仍然得到错误的记录返回。
      猜你喜欢
      • 1970-01-01
      • 2014-03-12
      • 1970-01-01
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 2023-03-21
      • 2014-07-01
      相关资源
      最近更新 更多