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.
Ответы
Ответ 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, и вы также можете дать другой часовой пояс на том же шаге (что имеет смысл, поскольку у вас будет нулевое время часть в любом случае).