Python/Python 모듈탐구

[Python] - 모듈탐구 calendar - 야 오늘 며칠이냐?

파이선에서 날짜에 대한 연산을 도와주는 calendar라는 모듈이다. 현실세계의 날짜 연산에서 사용될 수 있는 계산 함수들을 제공한다. 하나하나 알아보자


Calendar 객체

모든 날짜 연산은 캘린더 객체에서 이루어 진다. 객체는 다음과 같이 생성한다.

>>> my_cal = calendar.Calendar()
### Calendar(firstweekday=0)로 인자지정이 가능하다. firstweekday는 언제가 그 주의 시작요일인지 정하는 것이다)

Calendar객체가 제공하는 연산은 다음과 같다.

  • iterweekdays() : 0~6까지의 요일 인덱스를 담고 있는 iterator를 반환한다. firstweekday가 지정되어있으면 시작 순서가 바뀐다.
  • itermonthdays(year,month) : year년도의 month동안의 iterator를 반환한다. 그니까 itermonthdays(2020,12)면 2020년 12월의 일을 포함한 iterator를 반환하는 건데, 달력에 표기하기 위한 만큼의 넘어가는주와 넘어오는주를 포함해서 반환한다. 그때 값은 0이다.
  • itermonthdays2(year,month) : itermonthdays와 같은 범위이나, (일, 요일)의 튜플형태의 iterator를 반환한다.
  • itermonthdays3(year,month) : itermonthdays와 같은 범위이나, (년, 월, 일)의 튜플형태의 iterator를 반환한다.
  • itermonthdays4(year,month) : itermonthdays와 같은 범위이나, (년, 월, 일, 요일)의 튜플형태의 iterator를 반환한다.
  • monthdatescalendar(year,month) : itermonthdays와 같은 범위이나, 매일매일에 대한 datetime.date객체를 리스트로 반환한다.
  • monthdays2calendar(year,month) : itermonthdays와 같은 범위이나, 하루하루는 (일, 요일)의 튜플로, 주 단위로 리스트로 반환한다.
  • monthdayscalendar(year,month) : itermonthdays와 같은 범위이나, 주 단위 리스트로 반환한다
  • yeardatescalendar(year,width=3) : 연도에 대한 매일매일을 datetime.date객체로 월 단위 리스트로 반환한다. 이때 한 리스트원소에 얼만큼의 월이 들어갈지가 width이다.
  • yeardays2calendar(year,width=3) : 위와 유사하나 datetime.date객체는 아니고 요일이 포함된 튜플을 반환한다.
  • yeardayscalendar(year.width=3) : 위와 유사하나 datetime.date객체는 아니고 날짜만 해당하는 리스트를 반환한다.

 

 

TextCalendar 객체

Calendar는 숫자와 객체로 이루어져 있어 가시성이 떨어진다. 조금 보기 쉬운 표현을 위해서 TextCalendar라는 객체가 존재한다.

>>> my_cal = calendar.TextCalendar()
### TextCalendar(firstweekday=0)로 인자지정가능하다. firstweekday는 어디가 요일의 시작일지 이다.

TextCalendar 객체가 제공하는 연산은 다음과 같다.

  • formatmonth(theyear,themonth,w=0,l=0) : 해당 월의 달력을 출력한다. w, l로 달력 크기 지정을 한다.
  • prmonth(theyear,themonth,w=0,l=0) : formatmonth의 결과를 인쇄한다.
  • formatyear(theyear,w=2,l=1,c=6,m=3) : 해당 년도의 달력을 출력한다. w,l로 달력의 크기를, c로 월 사이사이의 공간의 크기를, m으로 몇 열로 출력할지를 정한다.
  • pryear(theyear,w=2,l=1,c=6,m=3) : formatyear의 결과를 인쇄한다.

 

 

HTMLCalendar 객체

HTMLCalendar은 HTML에서 사용할 수 있게끔 HTML 태그를 붙여준다. 

>>> my_cal = calendar.HTMLCalendar()
### HTMLCalendar(firstweekday=0)로 인자지정가능하다. firstweekday는 어디가 요일의 시작일지 이다.

TextCalendar 객체가 제공하는 연산은 다음과 같다.

  • formatmonth(theyear,themonth,withyear=True) : 월의 달력을 html Table로 반환한다. withyear의 설정으로 연도를 헤더에 표현할지를 선택할 수 있다.
  • formatyear(theyear,width=3) : 연도의 달력을 html Table로 반환한다. width는 행에 얼만큼의 월이 들어 갈지 이다.
  • formatyearpage(theyear,width=3,css='calendar.css',encoding=True) : 연도의 달력을 완전한 html로 생성한다. css를 지정할 수 있다.

* TextCalendar에는 css를 재정의 할 수 있도록 여러가지 Attrib도 있으니 사용이 필요하다면 포스팅 끝의 공식 문서를 참고바란다.

 

 

 

정적 매서드

다음은 calendar에서 제공하는 정적 매서드이다. Calendar.매서드명 으로 객체 생성 없이 이용 가능하다.

  • setfirstweekday(weekday) : 현재 import된 모듈의 calendar weekday를 weeday로 고정한다 주의 첫요일이 바뀐다. calendar에는 리터럴로 calendar.MONDAY등을 제공하니 사용 바란다.
  • firstweekday() : 요일의 현재 설정을 반환한다.
  • leapdays(y1,y2) : y1년과 y2년 사이의 윤년의 수를 반환한다.
  • weekday(year,month,day) : year년 month월 day일의 요일을 반환한다.
  • weekheader(n) : 요일의 헤더를 반환한다. n은 헤더의 길이이다(1 : "F", 3 : "Fri" 등)
  • monthrange(year,month) : year년 month월의 첫날의 요일과 월의 일수를 반환한다.
  • monthcalendar(year,month) : year년 month의 행렬을 반환한다.
  • month(theyear,themonth,w=0,l=0) : TextCalendar의 formatmonth를 바로 이용 가능하게 한다.
  • calendar(year,w=0,l=0,c=6,m=3) : TextCalendar의 formatyear를 바로 이용 가능하게 한다.

 

 

어트리뷰트

다음은 Calendar가 가진 클래스 어트리뷰트이다.

  • calendar.day_name : 현재 로케일의 요일을 나타내는 배열이다.
  • calendar.day_abbr : 현재 로케일의 약식 요일을 나타내는 배열이다.
  • calendar.month_name : 현재 로케일의 연중 월을 나타낸다.
  • calendar.mont_abbr : 현재 로케일의 연중 월을 약식으로 나타낸다.

 

* 출처 : https://docs.python.org/ko/3/library/calendar.html

 

calendar — 일반 달력 관련 함수 — Python 3.9.5 문서

calendar — 일반 달력 관련 함수 소스 코드: Lib/calendar.py 이 모듈을 사용하면 유닉스 cal 프로그램과 같은 달력을 출력할 수 있으며, 달력과 관련된 유용한 추가 함수를 제공합니다. 기본적으로, 이

docs.python.org


정적 매서드의 프린팅 함수는 제외하고 기술했다. 참고하도록 하자