2015-07-04 3 views
1

У меня есть строка даты, как это и затем использовать strptime() Так его, как этоДобавить время DATETIME

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%Y') 

и теперь я хочу, чтобы добавить 23 часов и 59 минут my_time

Я попытался .timedelta но это не работает? Как я могу это сделать?

+0

Что код, который вы используете? Это работает для меня –

+0

Вы спрашиваете, есть ли у вас «пробованный» код, но не опубликованные работы? Если вы знаете, что это не сработает, что вы ожидаете, что кто-нибудь расскажет вам об этом, не увидев код? –

ответ

9

Добавить время после; Вы можете сделать это с datetime.replace() method для создания нового объекта datetime:

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y') 
my_time = my_time.replace(hour=23, minute=59) 

datetime.strptime() устанавливает значение часов и минут по умолчанию, 0. Обратите внимание, что в течение двухзначного года (например, 15) вы использовали бы %y, а не %Y, который предназначен для четырехзначного года.

Вы также можете использовать datetime.combine() class method в пару с date и time объекта:

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y') 
my_time = datetime.datetime.combine(my_time.date(), datetime.time(23, 59)) 

Если вы чувствуете, что вы должны использовать timedelta(), примите во внимание, что добавление будет снова произвести новый объект datetime. Вы можете использовать дополненную задание, чтобы добавить его «на месте»:

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y') 
my_time += datetime.timedelta(hours=23, minutes=59) 

Демо:

>>> import datetime 
>>> my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y') 
>>> my_time.replace(hour=23, minute=59) 
datetime.datetime(2015, 7, 5, 23, 59) 
>>> datetime.datetime.combine(my_time.date(), datetime.time(23, 59)) 
datetime.datetime(2015, 7, 5, 23, 59) 
>>> my_time + datetime.timedelta(hours=23, minutes=59) 
datetime.datetime(2015, 7, 5, 23, 59) 
+0

, если вам нужно добавить отрицательную сумму или более одного дня, тогда будет работать только решение 'timedelta()'. – jfs

6

Во-первых, на основе строки даты вы предоставляете, то format, кажется, не так, вы должны используйте %y (маленький y) для двухзначных лет, %Y (столица Y) для четырехзначных лет.

Затем вы можете добавить время в my_time с помощью timedelta следующим образом, но операция добавления создает новый объект datetime, не меняет my_time на месте.

Следовательно, вам нужно будет назначить его обратно в my_time, как это -

>>> import datetime 

>>> my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y') 
>>> my_time = my_time + datetime.timedelta(hours=23,minutes=59) 
>>> my_time 
datetime.datetime(2015, 7, 5, 23, 59)