Станом на Python 3.7, datetime.datetime.fromisoformat()
може обробляти ваш формат:
>>> import datetime
>>> datetime.datetime.fromisoformat('2012-11-01T04:16:13-04:00')
datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000)))
У старих версіях Python ви не можете, не без безлічі копіткого ручного визначення часового поясу.
Python не включає базу даних часового поясу, оскільки вона буде застарілою занадто швидко. Натомість Python покладається на зовнішні бібліотеки, які можуть мати набагато швидший цикл випуску, щоб забезпечити для вас правильно налаштовані часові пояси.
Як побічний ефект, це означає, що аналіз часового поясу також повинен бути зовнішньою бібліотекою. Якщо dateutil
для вас занадто важка вага, використовуйте iso8601
замість цього, він проаналізує ваш конкретний формат:
>>> import iso8601
>>> iso8601.parse_date('2012-11-01T04:16:13-04:00')
datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=<FixedOffset '-04:00'>)
iso8601
це колосальні 4 Кб. Порівняйте python-dateutil
загальну суму 148 КБ.
Починаючи з Python 3.2, Python може обробляти прості часові пояси на основі зсуву та %z
аналізуватиме зміщення часових поясів -hhmm
та +hhmm
часові пояси в позначці часу. Це означає, що для позначки часу ISO 8601 вам доведеться видалити :
часовий пояс:
>>> from datetime import datetime
>>> iso_ts = '2012-11-01T04:16:13-04:00'
>>> datetime.strptime(''.join(iso_ts.rsplit(':', 1)), '%Y-%m-%dT%H:%M:%S%z')
datetime.datetime(2012, 11, 1, 4, 16, 13, tzinfo=datetime.timezone(datetime.timedelta(-1, 72000)))
Відсутність належного аналізу ISO 8601 відстежується у випуску Python 15873 .