python 일정 기간의 날짜 출력 방법

조회수 16966회

python을 가지고 일정 기간의 날짜를 출력하고자 합니다.

예를 들면 20160901부터 20161031까지입니다.

하지만 단순히 range를 가지고

date1 = int('20160901')
date2 = int('20161032')
for x in range(date1, date2):
    print x

이렇게 사용하는 경우에는 9월은 30일까지 있으나,

20160901

...

20160930

20160931

20160932

...

20160999

20161000

20161001

...

20161031

이런식으로 출력되어버립니다.

원하는 것은 201 60930 다음에는 20161001이 출력되는 건데 말이죠.

위 방법도 결국은 해당 기간을 모두 포함하니 결과는 출력되지만 쓰레기값이 잔뜩 들어가 효율성에 문제가 발생하고 있습니다. datetime으로 시간 타입으로 저장을 했더니 range(int형, int형)를 통해 범위를 사용하는데 문제가 발생하구요.

마땅한 방법이 떠오르지 않아 질문드려봅니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

3 답변

  • calendar.monthrange(year, month) 은 해당 월의 1일이 무슨 요일(월요일이 0)인지와 해당 월이 며칠까지 있는지를 리턴해줍니다.

    import calendar
    
    print calendar.monthrange(2016,10)  
    # 실행 결과값 (5, 31)
    

    time 모듈과 함께 위의 리턴값을 활용하면 원하시는 기능을 충분히 구현할 수 있을거라 생각합니다

  • 질문이 2년이나 지났지만 우연히 이 글을 보고 더 좋은 방법이 있어 다른 분들에게 도움이 될거 같아 추가 답변합니다.

    pandasdate_range()를 쓰면 간단합니다.

    import pandas
    
    dt_index = pandas.date_range(start='20160901', end='20161031')
    # pandas.date_range(start='20160901', end='20161031',freq='W-MON')
    # 을 하면 해당 기간 매주 월요일들만 추출합니다.
    
    # type(dt_index) => DatetimeIndex
    # DatetimeIndex => list(str)
    dt_list = dt_index.strftime("%Y%m%d").tolist()
    
    for i in dt_list:
        print(i)
    
  • 김선우님이 남겨주신 답변도 잘 사용했습니다. calendar 라이브러리는 처음 써보네요.

    그리고 자문 자답으로 하나 더 남기자면

    import datetime
    today = datetime.date.today()
    print today
    today = today + datetime.timedelta(+10)
    print today
    

    이렇게 쓸 경우

    2016-10-23 2016-11-02

    이렇게 출력됩니다. 알아서 계산이 되는거죠.. 저기 timedelta값은 날짜, 시간, 밀리초 등 여러 값을 넣을 수 있고, 해당 값을 +/- 해가면서 날짜값을 조절 할 수 있었습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)