Разница в неделях между двумя датами в python

#python

#python

Вопрос:

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

Скажем, у меня есть две даты:

02-Dec-2016 и 10-Jan-2017.

Я хочу, чтобы он предоставил мне вывод, подобный следующему

 02-Dec-2016 - 04-Dec-2016 (2 days) (2 days before monday comes)
05-Dec-2016 - 08-Jan-2017 (5 weeks) (starts from monday-sunday)
08-Jan-2017 - 10-Jan-2017 (2 days) (2 days after monday has gone)
  

Комментарии:

1. Можете ли вы просто использовать разницу в днях и разделить на 7?

2. нет. мой отсчет недели должен начинаться с понедельника. две даты, которые я указал выше, 20 декабря 2016 года, приходятся на пятницу. итак, следующий понедельник после этой даты приходится на 05 декабря 2016 года. итак, за два дня до наступления понедельника. 10 января 2017 года приходится на вторник. Итак, воскресенье перед этим — 08 января 2017 года. Разница в днях здесь снова через 2 дня после понедельника. Таким образом, общая разница в неделях составляет 5 недель

3. @SumanBhandari Вам нужно будет уточнить.

4. Я бы ожидал 4 недели и 6 дней для 2-го примера. Если вы ожидаете чего-то другого, вам нужно внести свою логику в код.

5. С какого дня начинаются ваши недели? Большинство компьютерных календарных систем (включая datetime модуль Python) используют недели, которые начинаются в понедельник и заканчиваются в воскресенье. Если вы хотите что-то еще, вам нужно указать детали.

Ответ №1:

Это то, что вы на самом деле хотите:

 import datetime


def diff(d1, d2):
    result = []
    delta = datetime.timedelta(days=0)
    day = datetime.timedelta(days=1)

    while d1.weekday() != 0:
        d1  = day
        delta  = day
    result.append((d1 - delta, d1 - day))

    weeks, days = divmod((d2 - d1).days, 7)
    d3 = d1   datetime.timedelta(weeks=weeks)
    d4 = d3   datetime.timedelta(days=days)

    result.append((d1, d3 - day))
    result.append((d3, d4))
    return result


d1 = datetime.date(2016, 12, 2)
d2 = datetime.date(2017, 01, 10)

for i,j in diff(d1,d2):
    print '{} - {} ({} days)'.format(datetime.datetime.strftime(i, "%d-%b-%Y"), datetime.datetime.strftime(j, "%d-%b-%Y"), (j-i).days   1)

# 02-Dec-2016 - 04-Dec-2016 (3 days)
# 05-Dec-2016 - 08-Jan-2017 (35 days)
# 09-Jan-2017 - 10-Jan-2017 (2 days)
  

Ответ №2:

Несколько удивительно, насколько сложно вычислить разницу между двумя временами в Python. Следующий код предназначен для различий в минутах, но вы можете изменить это на недели или другие атрибуты.

 # Compute the difference between two time values
import datetime 
df = pd.DataFrame({'ATime1' : ['8/26/2016 10:00','8/26/2016 10:01','8/26/2016 10:02','8/26/2016 10:03'], 'BBB' : [10,20,30,40],'CCC' : [100,50,-30,-50], 'ATime2' : ['8/26/2016 10:01','8/26/2016 10:02','8/26/2016 10:03','8/26/2016 10:04']})
s1 = pd.Series(df['ATime1'])  # Select one column of the dataframe and convert to a Series
s2 = pd.Series(df['ATime2'])
s1 = pd.to_datetime(s1)   #  Convert the Series object values to datetime values
s2 = pd.to_datetime(s2)
m1 = s1.dt.minute       #  Select minutes from the datetime values
m2 = s2.dt.minute
t1 = m1.loc[1]    #  Select the first minutes value in the column
t2 = m2.loc[1]
t1 = int(t1)       # Convert minutes to integer
t2 = int(t2)
diff = t2 - t1
if t2 > t1:
    print "ATime2 starts later than Atime1 by ", diff, " minute(s)."
else:
    print "ATime1 starts later than Atime2 by ", diff, " minute(s)."
    print t1, t2