2011-07-02 4 views

답변

74
import datetime 
def next_weekday(d, weekday): 
    days_ahead = weekday - d.weekday() 
    if days_ahead <= 0: # Target day already happened this week 
     days_ahead += 7 
    return d + datetime.timedelta(days_ahead) 

d = datetime.date(2011, 7, 2) 
next_monday = next_weekday(d, 0) # 0 = Monday, 1=Tuesday, 2=Wednesday... 
print(next_monday) 
+6

'((일 - 오늘) + 7) % 7' 취득하는 그날은 – jstaab

+2

일 뿐이라고 생각합니다. – bsa

18

다음 월요일 7 일 월요일 후 6 일 화요일 후, 등, 또한, 사용하고, 사용

>>> dt = datetime(2011, 7, 2) 
>>> dt + timedelta(days=(7 - dt.weekday())) 
datetime.datetime(2011, 7, 4, 0, 0) 

을 시도하는 파이썬의 datetime 형보고 월요일로 0, ..., 일요일은 6입니다.

+0

(2012 년 1 월 1 일)에 datetime (2013, 1) 이후에 일요일을 찾으려고 할 때 "datetime , 1) + timedelta (days = (7 - datetime (2013, 1, 1) .weekday())) ","datetime.datetime (2013, 1, 7, 0, 0) . – fixxxer

+0

@fixxxer - 답변에서 말한 것처럼 : 코드는'datetime' API의 몇 가지 속성을 사용합니다.이 속성은 월요일에만 찾는 경우에만 작동합니다. 'phihag'에서 제공하는 코드는 좀 더 일반적이며 다가오는 요일을 찾을 수 있습니다. – Dirk

+0

timedelta에서 7 대신 6을 사용하면 도움이 될 것이라고 생각하십니까? – fixxxer

3

날짜 개체를 추가하고 월요일이되면 개체를 중지 할 수 있습니다.

>>> d = datetime.date(2011, 7, 2) 
>>> while d.weekday() != 0: #0 for monday 
...  d += datetime.timedelta(days=1) 
... 
>>> d 
datetime.date(2011, 7, 4) 
-2

이 처음 다음주 월요일을 한 후 지정된 날짜 줄 것이다 :

import datetime 

def get_next_monday(year, month, day): 
    date0 = datetime.date(year, month, day) 
    next_monday = date0 + datetime.timedelta(7 - date0.weekday() or 7) 
    return next_monday 

print get_next_monday(2011, 7, 2) 
print get_next_monday(2015, 8, 31) 
print get_next_monday(2015, 9, 1) 

2011-07-04
2015년 9월 7일
2015년 9월 7일

-1

목록을 통해를 이해?

from datetime import * 
[datetime.today()+timedelta(days=x) for x in range(0,7) if (datetime.today()+timedelta(days=x)).weekday() % 7 == 0] 

(0 at the end is for next monday, returns current date when run on monday) 
0
weekday = 0 ## Monday 
dt = datetime.datetime.now().replace(hour=0, minute=0, second=0) ## or any specific date 
days_remaining = (weekday - dt.weekday() - 1) % 7 + 1 
next_dt = dt + datetime.timedelta(days_remaining) 
15

다음은 위의 약간 무게 답변을 간결 및 일반 대안입니다.

+0

이 답변은 upvotes를 수집하기에는 너무 늦게 도착했지만, 내가 제일 좋아하는 것입니다. – ASalazar

+1

매우 깨끗합니다, 제 표를 받았습니다. – Liquidgenius

1

또 다른 간단하고 우아한 해결책은 팬더 오프셋을 사용하는 것입니다.
날짜를 가지고 놀면 매우 유용하고 견고합니다.
- 첫 번째 일요일을 원한다면 주파수를 freq = 'W-SUN'으로 수정하십시오.
- 다음 일요일에 두 개가 필요하면 offset (일)을 변경하십시오.
- 팬더 오프셋을 사용하면 공휴일을 무시할 수 있으며 영업일에만 사용할 수 있습니다.
또한 적용 메서드를 사용하여 전체 DataFrame에서이 메서드를 쉽게 적용 할 수 있습니다.

# Getting the closest monday from a given date 
closest_monday = pd.date_range(start=date, end=date + offsets.Day(6), freq='W-MON')[0] 

# Adding a 'ClosestMonday' column with the closest monday for each row in a pandas df using apply 
# Require you to have a 'Date' column in your df 
def get_closest_monday(row): 
    return pd.date_range(start=row.Date, end=row.Date + offsets.Day(6), freq='W-MON')[0] 

df['ClosestMonday'] = df.apply(lambda row: get_closest_monday(row), axis=1) 
2
import datetime 

d = datetime.date(2011, 7, 2) 
while d.weekday() != 0: 
    d += datetime.timedelta(1) 
관련 문제