2015-03-25 10 views
2

У меня есть следующая строка: DATETIMEPython: формат даты и времени

Mon Oct 27 23:00:03 +0000 2014 

Я хотел бы преобразовать эту строку в форме, в которой я мог бы сравнить DateTimes. Итак, первое, что я попробовал, это преобразование в datetime в Python.

У меня возникли проблемы с правильным форматированием. Я следил за the documentation, но он не работает.

Я попытался следующие:

str = 'Mon Oct 27 23:00:03 +0000 2014' 
datetime.strptime(str, '%a %b %d %X %Z %Y') 

Как я могу получить эту работу?

+0

связаны: [Python: разбор даты с временной зоны из электронной почты] (http://stackoverflow.com/q/1790795/4279) – jfs

+0

Несвязанные: не используйте 'str' в качестве имени. Он затеняет встроенный Python. – jfs

+0

@ J.F.Sebastian Да, я знаю, но это был всего лишь пример. В моем коде я не использую str как имя переменной. – JNevens

ответ

4

Если вы хотите преобразовать его в объект datetime, вы можете использовать библиотеку python-dateutil.

Например:

In [6]: dateutil.parser.parse('Mon Oct 27 23:00:03 +0000 2014') 
Out[6]: datetime.datetime(2014, 10, 27, 23, 0, 3, tzinfo=tzutc()) 
2

В Python 3.2+:

>>> from datetime import datetime 
>>> timestr = 'Mon Oct 27 23:00:03 +0000 2014' 
>>> datetime.strptime(timestr, '%a %b %d %X %z %Y') 
datetime.datetime(2014, 10, 27, 23, 0, 3, tzinfo=datetime.timezone.utc) 

Обратите внимание на нижний регистр% г.

+1

Это возвращает следующую ошибку: 'ValueError: 'z' является плохой директивой в формате '% a% b% d% X% z% Y'' – JNevens

+0

Какую версию Python вы используете? Это работает для меня (Python 3.4.3). – itchee

+0

Я использую Python 2.7 – JNevens

0

Ваша проблема связана с вашим значением %z UTC offset (вы должны использовать нижний регистр z). Тем не менее,

%z is only supported in Python 3.2+

Если вы застряли с более старой версией Python, вы могли бы вынуть UTC смещение из строки и попытаться преобразовать его после преобразования остальное

1

Вот STDLIB только версия который работает на Python 2 и 3:

#!/usr/bin/env python 
from datetime import datetime 
from email.utils import parsedate_tz, mktime_tz 

timestamp = mktime_tz(parsedate_tz('Mon Oct 27 23:00:03 +0000 2014')) 
utc_dt = datetime.utcfromtimestamp(timestamp) 
# -> datetime.datetime(2014, 10, 27, 23, 0, 3) 

где utc_dt является объектом DateTime, который представляет время в UTC часовой пояс (независимо от ввода часового пояса).

Примечание: не поддерживает время, которое представляет собой скачок второй (хотя datetime объект не может представлять это так или иначе):

>>> datetime.utcfromtimestamp(mktime_tz(parsedate_tz('Tue June 30 23:59:60 +0000 2015'))) 
datetime.datetime(2015, 7, 1, 0, 0) 
Смежные вопросы