2016-06-18 6 views
0

Я пытаюсь добавить или минус время от объекта datetime, а затем преобразовать его в strptime, но я получаю сообщение об ошибке.изменение формата datetime с помощью strptime

Вот пример получения «часа» объекта datetime, добавление +1 к нему, а затем попытка использования strptime на нем;

time1 = datetime.datetime.strptime("09/Sep/2015:08:00:00", "%d/%b/%Y:%H:%M:%S") 

print time1.hour 
print time1.hour + 1 

> 8 
    9 

time3 = time1.hour + 1 
print time3.strptime('%H') 

> print time3.strptime('%H') 
AttributeError: 'int' object has no attribute 'strptime' 

Есть ли способ манипулировать объектами datetime и изменять его формат (с помощью strptime или аналогичного)?

+0

Это то, для чего предназначены объекты datetime.timedelta. Добавление их в datetime.datetime вернет другое datetime.datetime. –

ответ

1

time1.hour является int, 1 является int, Therfore time3 является int, поэтому вы получаете эту ошибку.

Вы должны также использовать strftime в своей последней строке, а не strptime.

Вы можете использовать relativedelta или timedelta (см комментарии), но я полагаю, что datetime.replace будет проще:

time1 = datetime.datetime.strptime("09/Sep/2015:08:00:00", "%d/%b/%Y:%H:%M:%S") 

time3 = time1.replace(hour=time1.hour + 1) 
print time3.strftime('%H') 
>> 09 

EDIT Это действительно не в состоянии в течение времени после 23:00. Используйте рекомендуемые подходы в комментариях для более надежного решения.

+0

В качестве альтернативы можно использовать timedelta: 'time3 = time1 + datetime.timedelta (hours = 1)' – vrs

+0

Я рекомендую использовать дельта-объекты для арифметических операций и использовать метод replace, более похожий на setter (datetimes неизменяемы) –

+0

@vrs Проблема с тем, что он вернет «9» вместо «09». Вот почему мне нужно strftime работать над этим. – user1165419