gpt4 book ai didi

django - 如何以天为单位注释日期时间的差异

转载 作者:行者123 更新时间:2023-12-03 15:12:18 26 4
gpt4 key购买 nike

我有一个 Booking具有 start 的模型和 end日期时间字段。我想知道预订涵盖多少天。我可以在 Python 中做到这一点,但我需要这个值来进行进一步的注释。

这是我尝试过的:

In [1]: Booking.objects.annotate(days=F('end')-F('start'))[0].days
Out[1]: datetime.timedelta(16, 50400)

这里有几个问题:
  • 我想要一个整数(或我可以在计算中使用的其他数字类型)作为输出,而不是 timedelta。设置 output_field 在这里没有任何意义。
  • 我的总和基于日期 .像这样的减法,如果不删除时间,可能会导致整个休息天数。

  • 在 Python 中我会做 (end.date() - start.date()).days + 1 .我怎样才能在数据库中做到这一点,最好是通过 ORM(例如数据库函数),但是一个 RawSQL就足以让这个出门吗?

    最佳答案

    我已经编写了几个数据库函数来转换和截断日期以解决 PostgreSQL 下的这两个问题。 DATE_PARTDATE_TRUNC我使用的内部函数是特定于数据库的 ☹

    from django.db.models import Func

    class DiffDays(Func):
    function = 'DATE_PART'
    template = "%(function)s('day', %(expressions)s)"

    class CastDate(Func):
    function = 'date_trunc'
    template = "%(function)s('day', %(expressions)s)"

    然后我可以:
    In [25]: Booking.objects.annotate(days=DiffDays(CastDate(F('end'))-CastDate(F('start'))) + 1)[0].days
    Out[25]: 18.0

    关于django - 如何以天为单位注释日期时间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38477352/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com