Python: анализ строки метки времени с 7 цифрами за микросекунды до даты и времени - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть строка метки времени, которая выглядит следующим образом:

2019-02-16T10:41:20.6080000+01:00

Я должен проанализировать ее до даты и времени.Поскольку для микросекунд используется 7 вместо 6 цифр, следующий формат не соответствует:

timestamp = "2019-03-14T14:37:37.000000+01:00"
parsed_timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%f%z") #ValueError: time data '2019-03-14T14:37:37.0000000+01:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'

Как я могу проанализировать этот формат?

Ответы [ 3 ]

1 голос
/ 09 апреля 2019

Использование dparser:

import dateutil.parser as dparser
dt_1 = '2019-02-16T10:41:20.6080000+01:00'
print("Datetime: {}".format(dparser.parse(dt_1,fuzzy=True)))

OUTPUT

Datetime: 2019-02-16 10:41:20.608000+01:00

Если вы хотите компонент даты:

print("Date: {}".format(dparser.parse(dt_1,fuzzy=True).date()))

OUTPUT

Date: 2019-02-16
0 голосов
/ 09 апреля 2019

Похоже, вы можете использовать простую нарезку строк.

Ex:

import datetime
timestamp = "2019-02-16T10:41:20.6080000+01:00"
parsed_timestamp = datetime.datetime.strptime(timestamp[:26], "%Y-%m-%dT%H:%M:%S.%f").date() 

print(parsed_timestamp)

Выход:

2019-02-16
0 голосов
/ 09 апреля 2019

На самом деле ваши данные неверны: у вас есть семь цифр для микросекунд, и в вашем часовом поясе есть двоеточие.

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

timestamp = "2019-02-16T10:41:20.6080000+01:00"
cleaned_timestamp = re.sub('(\d{6})\d(\+\d{2})(:)(\d{2})', r'\1\2\4', timestamp)
parsed_timestamp = datetime.datetime.strptime(cleaned_timestamp, "%Y-%m-%dT%H:%M:%S.%f%z")
parsed_timestamp

Выход:

datetime.datetime(2019, 2, 16, 10, 41, 20, 608000, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)))
...