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

22

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

Я попытался использовать 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.

    
задан pythonhunter 02.10.2014 в 04:47
источник

4 ответа

38
print then.date()

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

then = datetime.datetime.strptime(when, '%Y-%m-%d').date()
    
ответ дан Woody Pride 02.10.2014 в 05:21
4
>>> print then.date(), type(then.date())
2013-05-07 <type 'datetime.date'>
    
ответ дан Ignacio Vazquez-Abrams 02.10.2014 в 05:21
  • Спасибо за простой ответ! –  Malachi Bazar 20.08.2017 в 02:52
0

Для меня мне нужно было ПОЛУЧИТЬ объект времени, потому что я использовал 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)
    
ответ дан Dovy 14.10.2016 в 19:23
0

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

    
ответ дан nagylzs 21.08.2017 в 08:51