it-swarm.com.ru

Python -Удалить время из строки даты и времени

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

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

25
pythonhunter
print then.date()

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

then = datetime.datetime.strptime(when, '%Y-%m-%d').date()
46
Woody Pride
>>> print then.date(), type(then.date())
2013-05-07 <type 'datetime.date'>
4
Ignacio Vazquez-Abrams

Чтобы преобразовать строку в дату, самый простой способ 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)

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

1
nagylzs

Для меня мне нужно было держать объект timetime, потому что я использовал 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)
0
Dovy

Объекты datetime имеют метод replace(). Это сохраняет часовой пояс, так что вы можете сделать

>>> from Django.utils import timezone
>>> now = timezone.now()
>>> now
datetime.datetime(2018, 8, 30, 14, 15, 43, 726252, tzinfo=<UTC>)
>>> now.replace(hour=0, minute=0, second=0, microsecond=0)
datetime.datetime(2018, 8, 30, 0, 0, tzinfo=<UTC>)
0
ukrutt