Преобразование даты и времени в strptime

Я вытягиваю метку времени, которая выглядит следующим образом - 2014-02-03T19:24:07Z

Я пытаюсь подсчитать количество дней с 1 января.

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

yourdate = dateutil.parser.parse(timestamp)

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

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

5 ответов

Решение

Просто получите доступ к месяцу, используя день year, month, day атрибуты..

>>> import dateutil.parser
>>> yourdate = dateutil.parser.parse('2014-02-03T19:24:07Z')
>>> yourdate.year
2014
>>> yourdate.month
2
>>> yourdate.day
3

Просто чтобы быть немного более полным:

>>> from dateutil.parser import parse
>>> from datetime import datetime
>>> import pytz
>>> d = parse('2014-02-03T19:24:07Z')
>>> other = datetime(year=2014, month=1, day=1, tzinfo=pytz.utc)
>>> (d-other).days
33

Вы должны убедиться, что other datetime учитывает часовой пояс, если вы создаете его с datetime в отличие от даты, с которой вы анализируете dateutil,

Если вы хотите рассчитать:

import dateutil.parser
yourdate = dateutil.parser.parse('2014-02-03T19:24:07Z')
startdate = dateutil.parser.parse('2014-01-01T00:00:00Z')
print (yourdate - startdate)

Там нет необходимости конвертировать. Результирующий datetime.datetime Объект обладает всеми необходимыми свойствами, к которым вы можете обращаться напрямую. Например:

>>> import dateutil.parser
>>> timestamp="2014-02-03T19:24:07Z"
>>> yourdate = dateutil.parser.parse(timestamp)
>>> yourdate.day
3
>>> yourdate.month
2

Смотрите: https://docs.python.org/2/library/datetime.html.

Еще один способ решить без dateutil модуль:

import datetime

# start date for comparision
start = datetime.date(2014, 1, 1)

# timestamp as string
datefmt = "%Y-%m-%dT%H:%M:%SZ"
current = "2014-02-03T19:24:07Z"

# convert timestamp string to date, dropping time
end = datetime.datetime.strptime(current, datefmt).date()

# compare dates and get number of days from timedelta object
days = (end - start).days

Это предполагает, что вы не заботитесь о времени (включая часовые пояса).

Другие вопросы по тегам