2013-03-21 1 views
0

У меня есть даты в текущем формате строки: «Вт Фев 19 00:09:28 +1100 2013»Расчет дней с использованием даты строки в Python

Я пытаюсь выяснить, сколько дней прошло между даты в строке и текущей дате.

Я смог преобразовать строку в дату.

import time 
day = time.strptime('Tue Feb 19 00:09:28 +1100 2013', '%a %b %d %H:%M:%S +1100 %Y') 

ответ

5

Используйте datetime модуль вместо:

import datetime 
day = datetime.datetime.strptime('Tue Feb 19 00:09:28 +1100 2013', '%a %b %d %H:%M:%S +1100 %Y') 
delta = day - datetime.datetime.now() 
print delta.days 

Вычитание два datetime.datetime значения возвращает datetime.timedelta объект, который имеет атрибут days.

Ваши строки содержат смещение часового пояса, и вы жестко закодировали его для соответствия; если значение меняется, вам придется использовать парсер, который может обрабатывать смещение. python-dateutil package включает в себя как отличный парсер и часовой пояс поддержки справиться с этим:

>>> from dateutil import parser 
>>> parser.parse('Tue Feb 19 00:09:28 +1100 2013') 
datetime.datetime(2013, 2, 19, 0, 9, 28, tzinfo=tzoffset(None, 39600)) 

Обратите внимание, что, поскольку этот результат включает часового пояса, теперь нужно использовать часовой пояс-Aware datetime объектов при использовании арифметических операций с датами:

>>> from dateutil import tz 
>>> import datetime 
>>> utcnow = datetime.datetime.now(tz.tzutc()) 
>>> then = parser.parse('Tue Feb 19 00:09:28 +1100 2013') 
>>> utcnow - then 
datetime.timedelta(31, 12087, 617740) 
>>> (utcnow - then).days 
31 

Я создал переменную utcnow в приведенном выше примере, основанном на часовом поясе UTC, прежде чем вычислять, как давно была проанализирована дата.

+0

Это замечательно. Он работал в половине списка. Я тогда столкнулся с этим: Вт Сен 28 11:06:40 +1000 2010 '. Число перед годом отличается от строки в моем примере. Есть ли формат форматирования для этой части даты? – TDNS

+0

@TDNS: Это смещение часового пояса, и Python не поддерживает это (без поддержки временной зоны). Вам придется использовать внешний модуль для разбора этой части; пакет '' python-dateutil' (http://labix.org/python-dateutil) имеет отличный парсер. –

+0

Я написал для него уродливый взлом. Прости меня, я все еще учусь. – TDNS

Смежные вопросы