python - 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 小于现在,它将筛选出所有锦标赛并且我得到一个空列表,而我预计将来只会获得锦标赛。我对自己做错了什么感到困惑,并且不太精通日期时间的细节。
解决方案
推荐阅读
- rxjs - 返回满足某些条件后接收值的 Rxjs Observable
- android - 为什么 Livedata setValue 在调用两次时会被忽略?
- python - 我是 Python 新手。而且这个递归程序往往因为一些我无法弄清楚的奇怪原因而无法运行。任何帮助将不胜感激
- python-3.x - Django 在 Django 模型中创建数组
- java - 访问资产文件时出现 FileNotFoundException
- r - 编辑 tabitems 后,R 在 Shiny DashBoard 上渲染失败
- bash - 从包含要执行的可执行命令的 .txt 文件中读取,将执行的命令的输出发送到另一个文件
- r - 使用 dplyr,我应该如何根据另一列的值创建一列重复字符的字符串?
- android - Android 通知 setLargeIcon() 不起作用
- java - 考虑到缺少 EOF,如何从 Java 中的标准输入中读取?