将Unix时间戳与Django ORM中的日期进行比较

时间:2018-07-19 06:54:38

标签: django django-rest-framework django-orm unix-timestamp python-datetime

我正在尝试在特定日期从表中获取所有记录。

我的url.py代码是:

 url(r'^jobs/date/?P<date>.*',RunningJobsListApiView.as_view()),

这是我视图中从表中获取所有记录的代码。

class RunningJobsListApiView(generics.ListAPIView):
        queryset = LinuxJobTable.objects.annotate(status=Case(When(state=3, then=Value('Completed')),When(state=5, then=Value('Failed')),When(state=1, then=Value('Running')),default=Value('Unknown'),output_field=CharField(),),)
        serializer_class = JobInfoSerializer

现在,我要过滤url中特定日期的作业。但是在我的数据库中,日期是UNIX时间戳格式(即1530773247)。

如何将DateFormat(mm-dd-yyyy)与保存在数据库中的UNIX时间戳格式进行比较?

1 个答案:

答案 0 :(得分:2)

要从字符串日期表示中获取UNIX时间戳,您首先需要将字符串转换为带有strptime()的Python datetime,然后在其上调用timestamp()方法。但是,由于一天包含一系列时间戳,因此您需要在目标日期的开始和第二天的开始之间进行range查询。

类似的东西:

from datetime import datetime, timedelta

target_day = datetime.strptime(date, "%m-%d-%Y")
next_day = target_day + timedelta(days=1)
queryset = LinuxJobTable.objects.filter(timestamp__range=(
    int(target_day.timestamp()), 
    int(next_day.timestamp()) - 1  # since range is inclusive
))