Как преобразовать строку с информацией о часовом поясе в datetime в python без dateutil?

Я должен преобразовать строку, относящуюся к часовому поясу, к объекту datetime python.

Например, «2012-11-01T04: 16: 13-04: 00».

Я нахожу, что есть модуль dateutil которого есть функция синтаксического анализа, но я действительно не хочу использовать его, поскольку он добавляет зависимость.

Итак, как я могу это сделать? Я пробовал что-то вроде следующего, но не повезло.

 datetime.datetime.strptime("2012-11-01T04:16:13-04:00", "%Y-%m-%dT%H:%M:%S%Z") 

  • Как преобразовать строку python .isoformat () обратно в объект datetime
  • Преобразование ISO 8601 даты в секундах в Python
  • Создайте временную метку RFC 3339 в Python
  • Объект ISO to datetime: 'z' является плохой директивой
  • Что именно означает T и Z в timestamp?
  • Как разобрать дату в формате ISO 8601?
  • Преобразование временных меток со смещением в datetime obj с использованием strptime
  • Преобразование времени RFC 3339 в стандартную метку времени Python
  • 4 Solutions collect form web for “Как преобразовать строку с информацией о часовом поясе в datetime в python без dateutil?”

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

    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колоссальный 4KB маленький. Сравните это python-dateutil с типом python-dateutil 148KB.

    Начиная с Python 3.2 Python может обрабатывать простые временные -hhmm +hhmm смещения, а %z будет анализировать -hhmm и +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 отслеживается в выпуске 15873 Python .

    Вот Python Doc для объекта datetime, использующий пакет dateutil.

     from dateutil.parser import parse get_date_obj = parse("2012-11-01T04:16:13-04:00") print get_date_obj 

    В исходном вопросе есть две проблемы с кодом: в часовом поясе не должно быть «:», а строка формата для «часового пояса в качестве смещения» – это нижний регистр «% z», а не верхний «% Z».

    Это работает для меня в Python v3.6

     >>> from datetime import datetime >>> t = datetime.strptime("2012-11-01T04:16:13-0400", "%Y-%m-%dT%H:%M:%S%z") >>> print(t) 2012-11-01 04:16:13-04:00 

    Я новичок в Python, но нашел способ конвертировать

    2017-05-27T07:20:18.000-04:00 до

    2017-05-27T07:20:18 без загрузки новых утилит.

     from datetime import datetime, timedelta time_zone1 = int("2017-05-27T07:20:18.000-04:00"[-6:][:3]) >>returns -04 item_date = datetime.strptime("2017-05-27T07:20:18.000-04:00".replace(".000", "")[:-6], "%Y-%m-%dT%H:%M:%S") + timedelta(hours=-time_zone1) 

    Я уверен, что есть лучшие способы сделать это, не нарезая строку так много, но это выполнило свою работу.

    Python - лучший язык программирования в мире.