Преобразовать неизвестные строки формата в объекты даты и времени?

Вероятно, это очень простой вопрос, но после прочтения документации я до сих пор не могу понять, как это сделать...

У меня есть две строки в Python, которые содержат даты в неизвестном формате. Я не знаю, в каких форматах они находятся, за исключением того, что я знаю, что оба являются допустимыми выражениями даты и времени. Например, один из них может быть в формате ISO, а другой — в другом формате.

Все, что мне нужно, это иметь возможность сравнивать даты. Каков правильный способ превратить строки в соответствующие объекты даты и времени, чтобы их можно было сравнивать?

Благодарность!


person I Z    schedule 06.11.2012    source источник
comment
Я обновил заголовок; проблема не в сравнении строк даты и времени, а в преобразовании строк в сопоставимое значение.   -  person    schedule 07.11.2012


Ответы (1)


модуль dateutil содержит анализатор даты, который может анализировать строки даты во многих форматах.

Например,

In [13]: import dateutil.parser as parser

In [14]: parser.parse("19970902T090000")
Out[14]: datetime.datetime(1997, 9, 2, 9, 0)

In [15]: import datetime as dt

In [16]: now = dt.datetime.now()

In [17]: now.isoformat()
Out[18]: '2012-11-06T15:08:51.393631'

In [19]: parser.parse('2012-11-06T15:08:51.393631')
Out[19]: datetime.datetime(2012, 11, 6, 15, 8, 51, 393631)

In [20]: parser.parse('November 6, 2012')
Out[20]: datetime.datetime(2012, 11, 6, 0, 0)

Обратите внимание, что некоторые строки даты и времени могут быть неоднозначными: например, 10-09-2003 может означать 9 октября или 10 сентября. dateutil имеет такие параметры, как dayfirst и yearfirst для обработки этого:

In [21]: parser.parse("10-09-2003")
Out[21]: datetime.datetime(2003, 10, 9, 0, 0)

In [22]: parser.parse("10-09-2003", dayfirst = True)
Out[22]: datetime.datetime(2003, 9, 10, 0, 0)

In [23]: parser.parse("10-09-03", yearfirst = True)
Out[23]: datetime.datetime(2010, 9, 3, 0, 0)
person unutbu    schedule 06.11.2012