【问题标题】:Django | Datetime's time changes when doing the query姜戈 |查询时日期时间的时间发生变化
【发布时间】:2020-12-18 18:20:28
【问题描述】:

我正在尝试在一系列日期之间进行查询。查看 Django 生成的查询,我发现它没有从datetime 中花费时间

这是我的代码

        tz = pytz.timezone('Europe/London')
        today = datetime.now(tz=tz)
        week_end = today.replace(hour=23,minute=59,second=59,microsecond=0)
        day_start = today - timedelta(6)
        week_start = day_start.replace(hour=0, minute=0, second=0, microsecond=0)

        ultimas_transferencias = Transferencia.objects.filter(fecha__gte=week_start,
                                                              fecha__lte=week_end, estatus__id=1)\
            .extra(select={'dia': 'DAY(fecha)'}).order_by().values('dia') \
            .annotate(total=Sum('monto')).values('dia', 'total').annotate(numero=Count('pk')).values('dia', 'total','numero')
        print(ultimas_transferencias.query)
        return JsonResponse({'data': list(ultimas_transferencias)})

这是查询:

SELECT (DAY(fecha)) AS `dia`, SUM(`remesasapp_transferencia`.`monto`) AS `total`, COUNT(`remesasapp_transferencia`.`id`) AS `numero` 
FROM `remesasapp_transferencia` 
WHERE (`remesasapp_transferencia`.`estatus_id` = 1 AND 
`remesasapp_transferencia`.`fecha` >= 2020-08-23 23:00:00 
AND `remesasapp_transferencia`.`fecha` <= 2020-08-30 22:59:59) GROUP BY (DAY(fecha)) ORDER BY NULL

请注意,时间显示为 2020-08-23 23:00:00 而不是 2020-08-23 00:00:00

【问题讨论】:

  • Django 将所有时间作为 UTC 存储在数据库中,因此您应该在查询时考虑到这一点。 1 小时的差异可能是夏令时。
  • 谢谢@LucasMoeskops!你是对的,我使用 timezone.now() 而不是 datetime.now() 并且它有效。

标签: django django-orm mysql-python django-timezone


【解决方案1】:

我找到了解决方案。而不是today = datetime.now(tz=tz) 我今天使用= timezone.now()

【讨论】:

    猜你喜欢
    • 2012-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 2012-03-18
    • 1970-01-01
    • 2023-03-18
    • 2014-09-12
    相关资源
    最近更新 更多