首页 > 解决方案 > Python代码没有通过日期时间比较筛选出未来的日期

问题描述

尝试从应用程序的 API 端点筛选出未来日期时,我遇到了一个奇怪的问题。我有以下锦标赛,未来一小时列出 1 场锦标赛(锦标赛 8):

在此处输入图像描述

我有以下模型:

class Tournament(models.Model):
    name = models.CharField(max_length=250)
    start_time = models.DateTimeField(auto_now=False)
    active = models.BooleanField(default=True)

    def __str__(self):
        return self.name

我有以下看法:

def get_current_tournaments(request, player_id):
    registration_queryset = TournamentRegistration.objects.filter(player=player_id)
    active_tournaments = []
    for registration in registration_queryset:
        tournament = registration.tournament
        if tournament.active:
            utc=pytz.UTC
            start_time = tournament.start_time.replace(tzinfo=utc)
            if start_time > datetime.now(start_time.tzinfo):
                active_tournaments.append(tournament.pk)
    print(active_tournaments)
    return JsonResponse({'tournament_ids': active_tournaments})

每次我调用get_current_tournamnents()视图时,我都会得到一个玩家注册的所有锦标赛的列表,包括未来的(锦标赛 8 是未来)。我的期望是if start_time > datetime.now(start_time.tzinfo):筛选出未来的时间,只包括当前活跃的锦标赛,即已经开始的锦标赛(start_time 是过去的)。

HTTP GET /tournaments/current-tournaments/1/ 200 [0.02, 127.0.0.1:55555]
[2, 1, 4, 6, 5, 7, 8]

上面的列表包括现在的未来锦标赛 8。

现在,当我将该行更改为 时if start_time < datetime.now(start_time.tzinfo):,如果 start_time 小于现在,它将筛选出所有锦标赛并且我得到一个空列表,而我预计将来只会获得锦标赛。我对自己做错了什么感到困惑,并且不太精通日期时间的细节。

标签: pythondjangodatetimedjango-views

解决方案


推荐阅读