Подтвердить что ты не робот

Не может сравнивать datetime.datetime с datetime.date

У меня есть следующий код, и я получаю вышеуказанную ошибку. Поскольку я новичок в python, мне трудно понять синтаксис здесь и как я могу исправить ошибку:

if not start or date < start: start = date
4b9b3361

Ответ 1

Существует метод datetime.date() для преобразования из даты и времени в дату.

Чтобы сделать обратное преобразование, вы можете использовать эту функцию datetime.datetime(d.year, d.month, d.day)

Ответ 2

Вы можете использовать метод datetime.datetime.combine для сравнения объекта date с объектом datetime, а затем сравнить преобразованный объект с другим объектом datetime.

import datetime

dt1 = datetime.datetime(2011, 03, 03, 11, 12)
day = datetime.date(2011, 03, 02)
dt2 = datetime.datetime.combine(day, datetime.time(0, 0))

print dt1 > dt2

Ответ 3

Предполагая, что начало - это datetime, используйте его следующим образом:

if not start or date < start.date(): start = date

Я не думаю, что в python необходимо преобразовать дату в datetime, так как вы можете просто сделать противоположное и сравнить.

Или у вас есть другие методы для создания нового datetime, используя дату для преобразования и время в 00:00.

Ответ 4

Вы можете преобразовать datetime.date в datetime.datetime, построив последнее, используя первые атрибуты year, month и day:

from datetime import datetime, day

d = day(2000, 12, 31)
dt = datetime(d.year, d.month, d.day)

Благодаря Steven для решения.

Ответ 5

Ваши переменные start и date имеют разные типы, я думаю. Один из них - дата, а дата - дата. Вам может потребоваться показать больше кода, чтобы получить достойную помощь.

Но посмотрите на это: http://docs.python.org/library/datetime.html#available-types

Он сообщает вам, что datetime.datetime имеет атрибуты, такие как день, месяц и год, точно так же, как datetime.date.

Ответ 6

Эта проблема возникает, когда вы пытаетесь сравнить поле даты (DateField) и поле datetime (DateTimeField).

Решение будет проверяться, когда вы определили поля в своих моделях и убедитесь, что типы являются однородными.

Я предлагаю вам заменить все DateField на DateTimeField.