【问题标题】:Django cant do datetime comparisionDjango 无法进行日期时间比较
【发布时间】:2016-05-08 23:50:08
【问题描述】:

我想比较两个日期时间。问题是我总是得到 False。例如:validity_date = 2016 年 1 月 31 日上午 12:43,actual_time = 2016 年 1 月 31 日下午 2:40给出 False,validity_date = 2016 年 2 月 12 日下午 4:11,actual_time = 2016 年 1 月 31 日下午 2:40也给出了 False。谢谢

#models.py
class SomeModel(models.Model):
  validity_date = models.DateTimeField()

#views.py
def SomeView(request):
    model_list = SomeModel.objects.all()
    actual_time = datetime.datetime.now()
    context = {
        'model_list': model_list,
        'actual_time': actual_time,
    }
    return render(request, 'app/sometemplate.html', context)

#in template
{% if model_list %}
  {% for somemodel in model_list %}  
    {% if somemodel.validity_date >= actual_time %}
      <td>True</td>
    {% else %}
      <td>False</td>
    {% endif %}
  {% endfor %}
{% endif %}

【问题讨论】:

  • 您是否尝试将其实现为模型属性:stackoverflow.com/a/3798865/771848
  • 是的,但没有帮助。
  • 使用django.utils.timezone.now 而不是datetime.datetime.now,因为这将为您提供时区感知日期时间。我认为比较可能会失败,因为您正在比较不同的类型。由于它发生在模板中,因此没有错误消息。
  • django.utils.timezone.now 帮忙了,谢谢

标签: python django


【解决方案1】:

您可能正在与时区感知日期时间进行比较。使用django.utils.timezone.now() 而不是datetime.datetime.now()

>>> import django, datetime

>>> django.utils.timezone.now()
datetime.datetime(2016, 1, 31, 15, 6, 35, 471795, tzinfo=<UTC>)

>>> datetime.datetime.now()
datetime.datetime(2016, 1, 31, 16, 6, 43, 377016)

>>> datetime.datetime.now() > django.utils.timezone.now()
TypeError: can't compare offset-naive and offset-aware datetimes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-02
    • 1970-01-01
    • 2014-01-22
    • 2014-05-03
    • 2017-06-28
    • 2020-12-16
    • 1970-01-01
    相关资源
    最近更新 更多