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

Python -Remove Время из строки Datetime

У меня есть строка даты и вы хотите преобразовать ее в тип даты:

Я попытался использовать datetime.datetime.strptime в формате, который я хочу, но он возвращает время с преобразованием.

    when = alldates[int(daypos[0])]
    print when, type(when)

    then = datetime.datetime.strptime(when, '%Y-%m-%d')
    print then, type(then)

Это результат вывода:

   2013-05-07 <type 'str'>
   2013-05-07 00:00:00 <type 'datetime.datetime'>

Мне нужно удалить время: 00:00:00.

4b9b3361

Ответ 1

print then.date()

То, что вы хотите, это объект datetime.date. У вас есть объект datetime.datetime. Вы можете либо изменить объект при печати в соответствии с приведенным выше, либо сделать следующее при создании объекта:

then = datetime.datetime.strptime(when, '%Y-%m-%d').date()

Ответ 2

>>> print then.date(), type(then.date())
2013-05-07 <type 'datetime.date'>

Ответ 3

Для меня мне нужно было ХРАНИТЬ объект времени, потому что я использовал UTC, и это немного больно. Итак, это то, что я закончил:

date = datetime.datetime.utcnow()

start_of_day = date - datetime.timedelta(
    hours=date.hour, 
    minutes=date.minute, 
    seconds=date.second, 
    microseconds=date.microsecond
)

end_of_day = start_of_day + datetime.timedelta(
    hours=23, 
    minutes=59, 
    seconds=59
)

Пример вывода:

>>> date
datetime.datetime(2016, 10, 14, 17, 21, 5, 511600)
>>> start_of_day
datetime.datetime(2016, 10, 14, 0, 0)
>>> end_of_day
datetime.datetime(2016, 10, 14, 23, 59, 59)

Ответ 4

Чтобы преобразовать строку в дату, самым простым способом является AFAIK - модуль dateutil:

import dateutil.parser
datetime_object = dateutil.parser.parse("2013-05-07")

Он также может обрабатывать часовые пояса:

print(dateutil.parser.parse("2013-05-07"))
>>> datetime.datetime(2013, 5, 7, 1, 12, 12, tzinfo=tzutc())

Если у вас есть объект datetime, скажите:

import pytz
import datetime
now = datetime.datetime.now(pytz.UTC)

и вы хотите отрубить часть времени, тогда я думаю, что проще построить новый объект вместо "вычитания временной части". Он короче и более пуленепробиваемый:

date_part datetime.datetime(now.year, now.month, now.day, tzinfo=now.tzinfo)

Он также хранит информацию о часовом поясе, ее легче читать и понимать, чем приведение timedelta, и вы также можете дать другой часовой пояс на том же шаге (что имеет смысл, поскольку у вас будет нулевое время часть в любом случае).