дата и время django python установлены на полночь - PullRequest
32 голосов
/ 02 декабря 2011

У меня есть дата и время моего объекта django, но это может быть любое время суток. Это может быть в любое время в течение дня, но мне нужно установить мое время на 00:00:00 (и другую дату на 23:59:59, но принцип будет таким же)

end_date = lastItem.pub_date

в настоящее время дата окончания 2002-01-11 12:34:56 Что мне нужно сделать, чтобы это изменилось на 00: 00: 00?

я пытался:

end_date.hour = '00'

но получил: атрибут объекта 'datetime.datetime' 'time' только для чтения

Ответы [ 5 ]

45 голосов
/ 02 декабря 2011

Попробуйте это:

import datetime
pub = lastItem.pub_date
end_date = datetime.datetime(pub.year, pub.month, pub.day)
40 голосов
/ 05 июня 2013

Использование datetime «объединить» с time.min и time.max даст оба ваших datetime. Например:

from datetime import date, datetime, time
pub_date = date.today()
min_pub_date_time = datetime.combine(pub_date, time.min) 
max_pub_date_time = datetime.combine(pub_date, time.max)  

Результат с датой публикации от 05.06.2013:

min_pub_date_time -> datetime.datetime (2013, 6, 5, 0, 0)

max_pub_date_time -> datetime.datetime (2013, 6, 5, 23, 59, 59, 999999)

19 голосов
/ 02 декабря 2011

Вы уверены, что не хотите использовать даты вместо datetime?Если вы всегда устанавливаете время на полночь, вам следует рассмотреть возможность использования даты.Если вы действительно хотите использовать datetime, вот функция для получения того же дня в полночь:

def set_to_midnight(dt):
    midnight = datetime.time(0)
    return datetime.datetime.combine(dt.date(), midnight)
1 голос
/ 04 декабря 2017

Для дат с поддержкой tz это должно быть:

datetime.combine(dt.date(), datetime.min.time(), dt.tzinfo)
1 голос
/ 02 декабря 2011

datetime атрибуты экземпляра, такие как год, месяц, день, час и т. Д., только для чтения , поэтому вам просто нужно создать новый объект datetime и назначить его для end_date.

...