【问题标题】:Comparing unix timestamp with date in Django ORM在 Django ORM 中比较 unix 时间戳和日期
【发布时间】:2018-12-27 05:01:30
【问题描述】:

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

我的 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 时间戳格式?

【问题讨论】:

  • 我想最简单的方法是计算一天开始和一天结束的 unix-timestamp 并应用一个 between 过滤器。

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


【解决方案1】:

要从字符串日期表示中获取 UNIX 时间戳,您首先需要将字符串转换为 Python datetimestrptime(),然后对其调用 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
))

【讨论】:

    猜你喜欢
    • 2021-03-31
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 2019-05-18
    • 1970-01-01
    • 2012-04-20
    • 2013-03-13
    • 1970-01-01
    相关资源
    最近更新 更多