Найти количество дней между двумя датами (кортежи) - PullRequest
1 голос
/ 25 апреля 2020

Предположим, у меня есть кортеж A. Он содержит два вложенных кортежа. Вложенные кортежи - это даты в виде ДД, ММ, ГГГГ.

A = ((DD,MM,YYYY), (DD,MM,YYYY))

Теперь я хочу найти количество дней между двумя датами. Я уже пробовал возиться с модулем datetime, и это помогает, только когда объекты целые, а не кортежи. Моя проблема заключается в том, что я не могу изменить структуру, в которой представлены даты. Я полагаю, я могу использовать нарезку, но это было бы слишком много работы. Я довольно новичок в этом, и я надеюсь, что кто-то может пролить немного света на мой путь.

Ответы [ 3 ]

2 голосов
/ 25 апреля 2020

Вы можете использовать datetime.strptime для создания datetime объекта из заданной строки. Затем вы можете вычесть date1 и date2, что дает вам объект timedelta, и у этого объекта timedelta есть хороший атрибут days, который дает вам количество дней между двумя датами.

Использование:

from datetime import datetime

date1 = datetime.strptime("-".join(A[0]), "%d-%m-%Y")
date2 = datetime.strptime("-".join(A[1]), "%d-%m-%Y")
diff_days = (date1 - date2).days

print(diff_days)

Например, рассмотрим

A = (("24","05","2020"), ("25","04","2020")), тогда приведенный выше код напечатает diff_days как 29.

1 голос
/ 25 апреля 2020

почему нарезка слишком много работы?

import datetime

# A = ((DD,MM,YYYY), (DD,MM,YYYY))

A = ((1,1,2020), (20,4,2020))

delta = (
    datetime.date(A[1][2],A[1][1],A[1][0])-
    datetime.date(A[0][2],A[0][1],A[0][0])
)

1 голос
/ 25 апреля 2020

Код написан на моем смартфоне. Базовая c идея конвертировать с datetime и af строкой в ​​объект datetime в пределах списка. Постройте timedelta и, наконец, получите результат в разных форматах

A=((3,4,2000), (4,4,2000))

from datetime import datetime

dt = [datetime.strptime(f'{a[0]}.{a[1]}.{a[2]}','%d.%m.%Y') for a in A]
td = dt[1] - dt[0]

# when you want a tuple w only days
difference_tuple = (td.days)

# days, hours, minutes
days, hours, minutes = td.days, td.seconds // 3600, td.seconds // 60 % 60
difference_tuple2 = (days, hours, minutes)
...