Как мне конвертировать дату и время в дату (в Python)?

646

Как мне преобразовать datetime.datetimeобъект (например, возвращаемое значение datetime.datetime.now())в datetime.dateобъект в Python?

niklasfi
источник
16
Если вам просто нужно это datetime.datetime.now(), обратите внимание, что есть метод datetime.date.today().
Тьерри Дж
если вы уже импортировали from datetime import datetimeдату и время, например, вы можете просто добавить датуfrom datetime import datetime, date
Josh

Ответы:

985

Используйте date()метод:

datetime.datetime.now().date()
АРС
источник
14
Чтобы попасть в UTC, что может быть очень полезно -> datetime.datetime.utcnow()и, соответственно,datetime.datetime.utcnow().date()
Ник Брэди
2
Спасибо @SeanColombo, текущая дата в определенном часовом поясе должна бытьdatetime.datetime.now(pytz.timezone('US/Pacific')).date()
Моника Для генерального директора
132

Из документации:

datetime.datetime.date()

Дата возврата объекта с тем же годом, месяцем и днем.

Питер Мортенсен
источник
62

Вы используете datetime.datetime.date()метод:

datetime.datetime.now().date()

Очевидно, что вышеприведенное выражение может (и должно ИМХО :) быть записано как:

datetime.date.today()
tzot
источник
14
не путай парня.
Пятница
1
чтобы быть справедливым, этот ответ (использование .today()) является наиболее питонным для заявленного примера вопроса.
Даннид
2
Если вы используете сегодня, будьте осторожны при сравнении даты. today()имеет часовой компонент тоже. так что если вы сделаете: losdat = datetime.datetime.strptime(losdatstr, '%d%m%Y')и тогда if losdat < datetime.datetime.today():это будет всегда верно, потому что losdatбудет иметь компонент времени полуночи, который упадет до отметки времениtoday()
Деннис Декен
3
@DennisDecoene: зачем использовать datetime.datetime.today()вместо datetime.date.today(), когда кто-то хочет datetime.dateобъект?
tzot
@tzot Да, это было также то, на что я хотел указать, но было неясно.
Деннис Декоен
45

Вы можете преобразовать объект datetime в дату с помощью метода date () объекта date time следующим образом:

<datetime_object>.date()
Furbeenator
источник
3
import time
import datetime

# use mktime to step by one day
# end - the last day, numdays - count of days to step back
def gen_dates_list(end, numdays):
  start = end - datetime.timedelta(days=numdays+1)
  end   = int(time.mktime(end.timetuple()))
  start = int(time.mktime(start.timetuple()))
  # 86400 s = 1 day
  return xrange(start, end, 86400)

# if you need reverse the list of dates
for dt in reversed(gen_dates_list(datetime.datetime.today(), 100)):
    print datetime.datetime.fromtimestamp(dt).date()
безмятежность
источник
2
Вы хотели опубликовать этот ответ здесь? Мне кажется, что ваш ответ направлен на другой вопрос.
Все работники необходимы
2

Вы можете ввести эту форму кода для (сегодняшняя дата и названия дня и часа) : datetime.datetime.now().strftime('%y-%m-%d %a %H:%M:%S')

'19 -09-09 Пн 17:37:56 '

и введите этот код для ( сегодня просто дата) : datetime.date.today().strftime('%y-%m-%d') '19 -09-10 '

для объекта: datetime.datetime.now().date() datetime.datetime.today().date() datetime.datetime.utcnow().date() datetime.datetime.today().time() datetime.datetime.utcnow().date() datetime.datetime.utcnow().time()

kamran26
источник
OP хотел получить datetime.dateобъект, а не строку, которая strftimeбы возвращала (ref: docs.python.org/3/library/datetime.html#datetime.date.strftime ).
Гжегож Скибински