Как преобразовать строку метки времени с 7 цифрами в микросекундной части, используя strptime? - PullRequest
0 голосов
/ 24 мая 2018

Имея метку времени в виде строки, например 2016-09-22T13:57:31.2311892-04:00, как можно получить объект datetime?

Я пытался использовать strptime для этого, но у меня есть две проблемы:

  • Мне нужно удалить : из части часового пояса, в конце, чтобы %z работал правильно.
  • Часть микросекунд имеет 7 цифр, но strptime обрабатывает только до 6 цифр..

Есть ли способ анализа меток времени в этом формате без изменения * самой строки перед передачей на strptime?

* - изменяя, я думаю об удалении последней цифры микросекунды и удалении последней :.

Примечание. Это для вставки записи в MySQL.Если это поможет.

1 Ответ

0 голосов
/ 24 мая 2018

Как насчет конвертации, подобной этой:

dt = datetime.strptime(s[:-len('2-04:00')], '%Y-%m-%dT%H:%M:%S.%f')
# datetime.datetime(2016, 9, 22, 13, 57, 31, 231189)

https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior

Неожиданно для django нашел полезный метод:

from django.utils.dateparse import parse_datetime
dt = parse_datetime('2016-09-22T13:57:31.2311892-04:00')
# datetime.datetime(2016, 9, 22, 13, 57, 31, 231189, tzinfo=<django.utils.timezone.FixedOffset object at 0x7f20184f8390>)

https://docs.djangoproject.com/en/2.0/ref/utils/#module-django.utils.dateparse

Другой питонический формат (используйте maya https://github.com/kennethreitz/maya):

# pip install maya
import maya
maya.parse('2016-09-22T13:57:31.2311892-04:00').datetime()
# datetime.datetime(2016, 9, 22, 17, 57, 31, 231189, tzinfo=<UTC>)
...