Как разобрать дату и время с буквой Z без указания секунд после точки с запятой - PullRequest
0 голосов
/ 02 ноября 2018

Я анализирую логи этой программы и не могу получить доступ к исходному коду программы.

Журнал содержит интересную метку времени события в записи журнала - 2018-11-02T06:25:03870000Z. Это выглядит странно для меня, и я не знаю, насколько это правильно. Но я склонен думать, что 03974200Z описывает часть в секундах (%s), и я бы хотел собрать как можно больше информации из этой записи.

Я пытаюсь проанализировать этот пример из Python 3.7 следующим образом:

d = '2018-11-02T06:25:03870000Z'
dt.datetime.strptime(d, '%Y-%m-%dT%H:%M:%S')

Генерируется предсказуемая ошибка:

Traceback (most recent call last):
File "<input>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/_strptime.py", line 577, in _strptime_datetime
tt, fraction, gmtoff_fraction = _strptime(data_string, format)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/_strptime.py", line 362, in _strptime
data_string[found.end():])
ValueError: unconverted data remains: 870000Z

Обновление : У меня есть грязное решение для этого, но если есть какой-либо лучший подход для выполнения такой операции, чем это:

sc = d.split(':')[-1][:2]
dd = d.split(':')
en = ':'.join(dd[:-1]) 
en += ':' + sc
>> en
'2018-11-02T06:25:03'

Вопросы:

  1. Как правильно проанализировать такую ​​дату (определение 03 в примере как часть секунд)?
  2. (необязательно) Idk. Но является ли этот пример даты и времени в журнале верным (с точки зрения ISO или чего-либо еще)?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Z указывает часовой пояс Зулу (UTC или GMT), секунды задаются как целые секунды (03), за которыми следуют микросекунды (870000), поэтому вы можете полностью проанализировать дату, используя:

d = '2018-11-02T06:25:03870000Z'
dt.datetime.strptime(d, '%Y-%m-%dT%H:%M:%S%fZ')
0 голосов
/ 02 ноября 2018

Я бы использовал

import re
d = '2018-11-02T06:25:03870000Z'
date = re.findall('\d+', d)

это дает вам список всех вхождений одной или нескольких цифр подряд, и теперь вы можете делать с ним то, что вы хотите, например,

print("Y: %s, M: %s, D: %s, H: %s, m: %s, S: %s" %(tuple(date)))

конечно, вы можете также округлить секунды, чтобы они имели только две цифры

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...