2015-04-06 2 views
1

Если я напечатать datetime объект в Python с простым print myDateTime (или print(myDateTime) в Python3), как я могу восстановить datetime объект из полученной строки?Получить объект DATETIME из результата ул (DateTime)

Я мог бы спросить «что такое python strftime формат, используемый datetime.__str__()»?

ps: Есть много вопросов о преобразовании строк в объекты datetime python. В духе использования переполнения стека в качестве репозитория быстро доступных и полезных советов по программированию я спрашиваю об этом, так как ни один из этих вопросов не отвечает на этот довольно конкретный и часто требуемый запрос.

ответ

1

By definition, str(datetime_obj) is datetime_obj.isoformat(' '). Существует no method that would parse the ISO 8601 format back; Вы должны предоставить формат strptime() в явном виде:

>>> from datetime import datetime, timezone 
>>> now = datetime.now(timezone.utc) 
>>> s = str(now) 
>>> s 
'2015-04-06 10:31:08.256426+00:00' 
>>> s[:26] 
'2015-04-06 10:31:08.256426' 
>>> datetime.strptime(s[:26]+s[26:].replace(':',''), '%Y-%m-%d %H:%M:%S.%f%z') 
datetime.datetime(2015, 4, 6, 10, 31, 8, 256426, tzinfo=datetime.timezone.utc) 

%z поддерживает +HHMM, но он не поддерживает +HH:MM именно поэтому replace() вызова используются здесь.

datetime.timezone можно приобрести с Python 3.2. Для более старых версий см

1

Если объект DateTime не имеет временной зоны информации (возможно истолковано как время UTC), вы можете сделать что-то вроде этого (питон 2 в этом случае, но то же самое в Python 3):

import datetime 
unprintStrptimeFmt = "%Y-%m-%d %H:%M:%S.%f" 
d = datetime.datetime.utcnow() 
print d 
# produces e.g.: 2015-04-06 03:11:23.840526 
dd = datetime.datetime.strptime("2015-04-06 03:11:23.840526",unprintStrptimeFmt) 
print dd == d 
# produces: True 
Смежные вопросы