Вопрос-Ответ

Convert string "Jun 1 2005 1:33PM" into datetime

Преобразовать строку "Jun 1 2005 1: 33PM" в datetime

У меня есть огромный список строк datetime, подобных следующему

["Jun 1 2005 1:33PM", "Aug 28 1999 12:00AM"]

Как мне преобразовать их в datetime объекты?

Переведено автоматически
Ответ 1

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

>>> from datetime import datetime
>>> datetime.strptime('Jun 1 2005 1:33PM', '%b %d %Y %I:%M%p')
datetime.datetime(2005, 6, 1, 13, 33)

Чтобы получить date объект, используя существующий datetime объект, преобразуйте его с помощью .date():

>>> datetime.strptime('Jun 1 2005', '%b %d %Y').date()
date(2005, 6, 1)

Ссылки:


  • strptime документы: Python 2, Python 3



  • strptime/strftime документы по форматированию строк: Python 2, Python 3



  • strftime.org формат строки контрольной таблицы



Примечания:


  • strptime = "время разбора строки"

  • strftime = "время в формате строки"

Ответ 2

Используйте стороннюю dateutil библиотеку:

from dateutil import parser
parser.parse("Aug 28 1999 12:00AM") # datetime.datetime(1999, 8, 28, 0, 0)

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

Установите ее с помощью:

pip install python-dateutil
Ответ 3

Проверьте strptime в модуле time. Оно является обратным по отношению к strftime.

$ python
>>> import time
>>> my_time = time.strptime('Jun 1 2005 1:33PM', '%b %d %Y %I:%M%p')
time.struct_time(tm_year=2005, tm_mon=6, tm_mday=1,
tm_hour=13, tm_min=33, tm_sec=0,
tm_wday=2, tm_yday=152, tm_isdst=-1)

timestamp = time.mktime(my_time)
# convert time object to datetime
from datetime import datetime
my_datetime = datetime.fromtimestamp(timestamp)
# convert time object to date
from datetime import date
my_date = date.fromtimestamp(timestamp)
Ответ 4

Python >= 3.7

Чтобы преобразовать строку ГГГГ-ММ-ДД в объект datetime, можно использовать datetime.fromisoformat.

from datetime import datetime

date_string = "2012-12-12 10:10:10"
print (datetime.fromisoformat(date_string))
2012-12-12 10:10:10

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


Это не поддерживает синтаксический анализ произвольных строк ISO 8601 - это предназначено только для обратной операции datetime.isoformat(). Более полнофункциональный анализатор ISO 8601, dateutil.parser.isoparse доступен в пакете сторонних производителей dateutil.


python datetime