Вычитание дат с помощью Python

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

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

Я ищу метод, который может вычесть две даты и вернуть разницу во второй, а не только день.

Ответ 1

from datetime import datetime

birthday = datetime(1988, 2, 19, 12, 0, 0)
diff = datetime.now() - birthday
print diff
# 8954 days, 7:03:45.765329

Ответ 2

Используйте время UTC, иначе возраст в секундах может идти назад во время перехода на летнее время:

from datetime import datetime

born = datetime(1981, 12, 2) # provide UTC time
age = datetime.utcnow() - born
print(age.total_seconds())

Вы также не можете использовать местное время, если ваша программа работает на компьютере, находящемся в другом месте (часовом поясе), с которого родилось лицо, или если временные правила были изменены в этом месте с момента рождения. Это может привести к ошибке нескольких часов.

Если вы хотите принять во внимание секунды прыжка, задача становится практически невозможной.

Ответ 3

Создайте datetime.datetime с вашей даты:

datetime.datetime.combine(birthdate, datetime.time())

Теперь вы можете вычесть его из datetime.datetime.now().

>>> from datetime import date, datetime, time
>>> bday = date(1973, 4, 1)
>>> datetime.now() - datetime.combine(bday, time())
datetime.timedelta(14392, 4021, 789383)
>>> print datetime.now() - datetime.combine(bday, time())
14392 days, 1:08:13.593813

Ответ 4

При datettime двух объектов datettime вы получите объект datettime.timedelta.

from datettime import datetime
x = datetime.now()
y = datetime.now()
delta = y - x

Это даст вам разницу во времени с разрешением к микросенсодам.

Для получения дополнительной информации ознакомьтесь с официальной документацией

Ответ 5

import datetime
born = datetime.date(2002, 10, 31)
today = datetime.date.today()
age = today - born

print(age.total_seconds())

Выход: 463363200,0