Разбор строковой даты '2018-03-21T14:35:18.000Z'. Поиск регулярными выражениями

Есть переменная:

video_daysFromPublication = '2018-03-21T14:35:18.000Z'

Необходимо извлечь год, месяц, день, час, минуты, и секунды.

2 ответа

Парсинг через datetime:

video_daysFromPublication = '2018-03-21T14:35:18.000Z'

import datetime as DT
date = DT.datetime.strptime(video_daysFromPublication, '%Y-%m-%dT%H:%M:%S.000Z')
date = date.replace(tzinfo=DT.timezone.utc)

# Необходимо извлечь год, месяц, день, час, минуты, и секунды.
print(date.year, date.month, date.day, date.hour, date.minute, date.second)

Парсинг через регулярку:

import re
match = re.findall(r'(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).000Z', video_daysFromPublication)[0]

# Если нужно значения получить как числа:
# year, month, day, hour, minute, second = map(int, match)
year, month, day, hour, minute, second = match
print(year, month, day, hour, minute, second)


Можно воспользоваться модулем dateutil - он пытается сам угадать формат даты/времени:

from dateutil.parser import parse as dtparse   # pip install python-dateutil

In [88]: dtparse('2018-03-21T14:35:18.000Z')
Out[88]: datetime.datetime(2018, 3, 21, 14, 35, 18, tzinfo=tzutc())

если указан TZ offset:

In [89]: dtparse('2018-03-21T14:35:18.000-03:00')
Out[89]: datetime.datetime(2018, 3, 21, 14, 35, 18, tzinfo=tzoffset(None, -10800))

In [90]: dtparse('2018-03-21T14:35:18.000+01:00')
Out[90]: datetime.datetime(2018, 3, 21, 14, 35, 18, tzinfo=tzoffset(None, 3600))

Еще примеры:

In [91]: dtparse('1 December 2017')
Out[91]: datetime.datetime(2017, 12, 1, 0, 0)

In [92]: dtparse('Dec 1st 2017')
Out[92]: datetime.datetime(2017, 12, 1, 0, 0)

In [93]: dtparse('22.03.2017 21:46')
Out[93]: datetime.datetime(2017, 3, 22, 21, 46)

In [94]: dtparse('Mar 22nd 2018')
Out[94]: datetime.datetime(2018, 3, 22, 0, 0)

licensed under cc by-sa 3.0 with attribution.