2010-03-04 3 views
15

파이썬을 사용하여 지난 수요일에 대한 날짜 객체를 찾고 싶습니다. 오늘 isocalendar를 사용하여 오늘이 어디에 있는지 파악하고 지난 수요일에 가기 위해 일주일에 되돌아 갈 필요가 있는지를 결정할 수 있습니다. 그러나, 그 정보를 사용하여 새 날짜 객체를 만드는 방법을 알 수 없습니다. 기본적으로 iso 달력 튜플에서 날짜를 만드는 방법을 알아야합니다.지난 수요일에 Python 날짜 객체를 얻는 방법

from datetime import date 
today = date.today() 
if today.isocalendar()[2] > 3: #day of week starting with Monday 
    #get date for Wednesday of last week 
else: 
    #get date for Wednesday of this current week 
+0

오늘 수요일 인 경우 수행 할 작업을 명시 적으로 말하십시오. ISO 달력이 문제와 관련이 있습니까? 아니면 시도한 솔루션의 유물입니까? –

+1

그냥 인공물입니다. DisplacedAussie는 머리에 그것을 박 았어. – roktechie

답변

38

나는 이것을 원한다고 생각합니다. 지정된 날이 수요일이면 그 날을 줄 것입니다.

from datetime import date 
from datetime import timedelta 

today = date.today() 
offset = (today.weekday() - 2) % 7 
last_wednesday = today - timedelta(days=offset) 

예는 지난 수요일 3 월 매일을 위해 :

for x in xrange(1, 32): 
    today = date(year=2010, month=3, day=x) 
    offset = (today.weekday() - 2) % 7 
    last_wednesday = today - timedelta(days=offset) 

    print last_wednesday 
-1

http://docs.python.org/library/datetime.html

이 DATE2 = DATE1 사용하여 자신의 기능을 쓰기 읽기 - isoweek 3 같지 않은 동안 이전 일 동안 timedelta (일 = 1) date.isoweekday() 반복하는을 (수요일)

주 월요일에 시작 가정,
+1

은 확실히 작동하지만 이것은 매우 비효율적입니다. –

+3

몹시 방법 몇 최대 비교를 고려하여 약간 거친 것, 그는 아마 자주 (내가 너무 빨리 함께 뭔가 뭔가를 던졌다 동의가 전화를받을 수 없습니다 마지막 wensday를 얻을 수있는 기능에 대해 물었다. –

-1

나는이 사용자의 요구 사항을 충족하는지 모르겠지만, 그것은 주어진 날짜와 같은 주에 수요일 수요일 지정된 날짜에 가장 가까운 당신에게 을 얻어야한다 :

7

"지난 수요일"은 "오늘"과 동일 할 수 없습니다 가정하면, 이것은 어떤을 위해 그것을 수행하는 방법을 보여줍니다 요일 :

>>> from datetime import date 
>>> from datetime import timedelta 
>>> 
>>> MON, TUE, WED, THU, FRI, SAT, SUN = range(7) 
>>> 
>>> def lastWday(adate, w): 
...  """Mon:w=0, Sun:w=6""" 
...  delta = (adate.weekday() + 6 - w) % 7 + 1 
...  return adate - timedelta(days=delta) 
... 
>>> for x in range(8, 16): 
...  start = date(year=2010, month=3, day=x) 
...  prev = lastWday(start, WED) 
...  print start, start.weekday(), prev, prev.weekday() 
... 
2010-03-08 0 2010-03-03 2 
2010-03-09 1 2010-03-03 2 
2010-03-10 2 2010-03-03 2 
2010-03-11 3 2010-03-10 2 
2010-03-12 4 2010-03-10 2 
2010-03-13 5 2010-03-10 2 
2010-03-14 6 2010-03-10 2 
2010-03-15 0 2010-03-10 2 
+0

이 보통합니다. 많은 도움이 될 것입니다 나는 화요일에 프로그램을 운영 중이며 "마지막 화요일"이 무엇인지 알고 싶다. 나는 "오늘"을 의미하지 않는다. 나는 1 주일 전에 끝난 것을 의미한다. 내 코드에서 "if"문을 제거하십시오. –

관련 문제