calendar — 일반 달력 관련 함수
calendar — 일반 달력 관련 함수
(소스: Lib/calendar.py)
이 모듈은 Unix cal 프로그램처럼 달력을 출력할 수 있게 해 주고, 달력과 관련된 추가 유용한 함수를 제공해요. 기본적으로 이 달력들은 월요일을 한 주의 첫날, 일요일을 마지막 날(유럽 관례)로 해요. setfirstweekday()로 한 주의 첫날을 일요일(6)이나 다른 어느 요일로도 설정할 수 있어요. 날짜를 지정하는 매개변수는 정수로 주어져요. 관련 기능은 datetime과 time 모듈도 함께 보세요.
이 모듈에 정의된 함수와 클래스는 이상화된 달력, 즉 현재 그레고리력이 양방향으로 무한히 확장된 것을 사용해요. 이는 Dershowitz와 Reingold의 "Calendrical Calculations"에서 "proleptic Gregorian" 달력의 정의와 일치해요. 0과 음수 연도는 ISO 8601 표준이 규정한 대로 해석돼요. 연도 0은 기원전 1년, 연도 -1은 기원전 2년이에요.
본문
class calendar.Calendar(firstweekday=0)
Calendar 객체를 만들어요. firstweekday는 한 주의 첫 날을 지정하는 정수로, MONDAY는 0(기본), SUNDAY는 6이에요. Calendar 객체는 달력 데이터를 포맷팅용으로 준비하는 데 쓸 수 있는 여러 메서드를 제공해요. 이 클래스는 자체적으로 포맷팅하지 않고, 그건 서브클래스의 몫이에요.
Calendar 인스턴스의 메서드·속성:
firstweekday: 첫 요일을 정수(0–6)로. 이 속성은setfirstweekday()와getfirstweekday()로 설정·읽을 수도 있어요.getfirstweekday(): 현재 첫 요일을 int(0–6)로 반환. firstweekday 속성 읽기와 동일.setfirstweekday(firstweekday): 첫 요일을 firstweekday(int, 0–6)로 설정. 속성 설정과 동일.iterweekdays(): 한 주에 쓰일 요일 번호 이터레이터를 반환. 첫 값은 firstweekday 속성 값과 같아요.itermonthdates(year, month): year의 month(1–12) 달에 대한 이터레이터 반환. 완전한 주를 만들기 위해 필요한 달 시작 전·끝 후의 모든 날을datetime.date객체로 반환.itermonthdays(year, month):itermonthdates()와 비슷하지만datetime.date범위에 제한되지 않아요. 반환되는 날은 단순히 월의 날짜 숫자이고, 지정 달 밖의 날은 0이에요.itermonthdays2(year, month):itermonthdates()와 비슷. (달 일자, 요일) 튜플 반환.itermonthdays3(year, month): (연, 월, 일) 튜플 반환. (3.7 추가)itermonthdays4(year, month): (연, 월, 일, 요일) 튜플 반환. (3.7 추가)monthdatescalendar(year, month): 그 달의 전체 주들의 리스트를 반환. 주는 7개의datetime.date객체 리스트.monthdays2calendar(year, month): 주를 7개의 (일자, 요일) 튜플로.monthdayscalendar(year, month): 주를 7개의 일자 숫자로.yeardatescalendar(year, width=3): 포맷팅 준비된 해당 연도의 데이터 반환. 월 행들의 리스트이고, 각 월 행은 최대 width개(기본 3) 월. 각 월은 46주, 각 주는 17일. 날은datetime.date객체.yeardays2calendar(year, width=3): week 리스트 항목이 (일자, 요일) 튜플.yeardayscalendar(year, width=3): week 리스트 항목이 일자 숫자. 이 달 밖의 일자는 0.
class calendar.TextCalendar(firstweekday=0)
평문 텍스트 달력을 생성할 수 있어요. 메서드:
formatday(theday, weekday, width): 주어진 width로 포맷된 단일 날을 나타내는 문자열. theday가 0이면 빈 날을 나타내는 지정 width만큼의 공백 문자열. weekday 매개변수는 사용되지 않아요.formatweek(theweek, w=0): 개행 없는 단일 주를 문자열로. w가 주어지면 중앙 정렬된 날짜 열의 너비를 지정.formatweekday(weekday, width): 지정 너비로 포맷된 단일 요일 이름 문자열. weekday는 0(월)~6(일) 정수.formatweekheader(width): 요일 이름의 헤더 행을 담은 문자열. 로케일 설정에 따라 이름이 달라지고 지정 너비로 패딩돼요.formatmonth(theyear, themonth, w=0, l=0): 한 달 달력을 여러 줄 문자열로. w는 날짜 열 너비, l은 각 주가 쓸 줄 수.formatmonthname(theyear, themonth, width=0, withyear=True): 지정 너비 내 중앙 정렬된 월 이름 문자열. withyear가 True면 연도 포함.prmonth(theyear, themonth, w=0, l=0):formatmonth()이 반환한 한 달 달력 출력.formatyear(theyear, w=2, l=1, c=6, m=3): 한 해 전체의 m열 달력을 여러 줄 문자열로. w, l, c는 각각 날짜 열 너비, 주당 줄 수, 월 열 사이 공백.pryear(theyear, w=2, l=1, c=6, m=3):formatyear()이 반환한 한 해 달력 출력.
class calendar.HTMLCalendar(firstweekday=0)
HTML 달력을 생성할 수 있어요. 메서드:
formatmonth(theyear, themonth, withyear=True): 한 달 달력을 HTML 테이블로. withyear가 true면 헤더에 연도 포함, 아니면 월 이름만.formatyear(theyear, width=3): 한 해 달력을 HTML 테이블로. width(기본 3)는 행당 월 수.formatyearpage(theyear, width=3, css='calendar.css', encoding=None): 한 해 달력을 완전한 HTML 페이지로. css는 스타일시트 이름(None이면 스타일시트 없음), encoding은 출력 인코딩(기본 시스템 기본).formatmonthname(theyear, themonth, withyear=True): 월 이름을 HTML 테이블 행으로.
커스터마이즈 가능한 CSS 클래스 속성:
cssclasses: 각 요일에 쓰는 CSS 클래스 리스트. 기본["mon", "tue", "wed", "thu", "fri", "sat", "sun"]. 각 날에 스타일을 더할 수 있어요. 리스트 길이는 7이어야 해요.cssclass_noday: 이전/다음 달에 발생하는 요일의 CSS 클래스. (3.7)cssclasses_weekday_head: 헤더 행의 요일 이름에 쓰는 CSS 클래스 리스트. 기본 cssclasses와 같음. (3.7)cssclass_month_head: 월 헤드 CSS 클래스(formatmonthname()이 사용). 기본 "month". (3.7)cssclass_month: 전체 월 테이블의 CSS 클래스(formatmonth()이 사용). 기본 "month". (3.7)cssclass_year: 전체 연도 테이블-오브-테이블 CSS 클래스(formatyear()이 사용). 기본 "year". (3.7)cssclass_year_head: 전체 연도의 테이블 헤드 CSS 클래스(formatyear()이 사용). 기본 "year". (3.7)
단수 이름이지만 단일 CSS 클래스를 공백 구분 리스트로 바꿀 수 있어요.
로케일 달력 클래스
class calendar.LocaleTextCalendar(firstweekday=0, locale=None):TextCalendar의 서브클래스. 생성자에 로케일 이름을 넘길 수 있고 지정 로케일의 월·요일 이름을 반환해요.class calendar.LocaleHTMLCalendar(firstweekday=0, locale=None):HTMLCalendar의 서브클래스.
참고: 이 두 클래스의 생성자,
formatweekday(),formatmonthname()메서드는LC_TIME로케일을 임시로 주어진 로케일로 바꿔요. 현재 로케일은 프로세스 전체 설정이라 이들은 스레드 안전하지 않아요.
모듈 함수
calendar.setfirstweekday(firstweekday): 각 주를 시작할 요일 설정 (0은 월, 6은 일).MONDAY,TUESDAY, ...SUNDAY상수 제공.calendar.firstweekday(): 각 주를 시작할 요일의 현재 설정 반환.calendar.isleap(year): year가 윤년이면 True, 아니면 False.calendar.leapdays(y1, y2): y1부터 y2(제외) 범위의 윤년 수 반환. 세기 변경을 가로지르는 범위에서 작동.calendar.weekday(year, month, day): 요일 반환 (0은 월요일).calendar.weekheader(width): 약식 요일 이름을 담은 헤더 반환. width는 한 요일의 문자 너비.calendar.monthrange(year, month): 지정 연·월에 대해 그 달 첫날의 요일과 그 달의 일수 반환.calendar.monthcalendar(year, month): 한 달 달력을 나타내는 행렬 반환. 각 행은 한 주, 달 밖의 날은 0. 각 주는setfirstweekday()로 설정되지 않으면 월요일 시작.calendar.prmonth(theyear, themonth, w=0, l=0):month()이 반환한 한 달 달력 출력.calendar.month(theyear, themonth, w=0, l=0):TextCalendar의formatmonth()을 사용한 한 달 달력을 여러 줄 문자열로.calendar.prcal(theyear, w=0, l=0, c=6, m=3):calendar()이 반환한 한 해 달력 출력.calendar.calendar(theyear, w=2, l=1, c=6, m=3):TextCalendar의formatyear()을 사용한 한 해 3열 달력.calendar.timegm(tuple):time모듈의gmtime()이 반환한 것 같은 시간 튜플을 받아 epoch 1970과 POSIX 인코딩을 가정한 Unix 타임스탬프를 반환.time.gmtime()과timegm()은 서로의 역이에요.
데이터 속성
calendar.day_name: 현재 로케일의 요일을 나타내는 시퀀스. 월요일이 0.calendar.day_abbr: 현재 로케일의 약식 요일 시퀀스. Mon이 0.calendar.MONDAY~calendar.SUNDAY: 요일 별칭. MONDAY는 0, SUNDAY는 6. (3.12 추가)class calendar.Day: 요일을 정수 상수로 정의하는 열거형. 멤버는 MONDAY~SUNDAY로 모듈 스코프에 export. (3.12 추가)calendar.month_name: 현재 로케일의 연중 월 시퀀스. 1월이 1이므로 길이 13이고 month_name[0]은 빈 문자열.calendar.month_abbr: 현재 로케일의 약식 월 시퀀스. 길이 13, month_abbr[0]은 빈 문자열.calendar.JANUARY~calendar.DECEMBER: 월 별칭. JANUARY는 1, DECEMBER는 12. (3.12 추가)class calendar.Month: 월을 정수 상수로 정의하는 열거형. 멤버는 JANUARY~DECEMBER로 모듈 스코프에 export. (3.12 추가)
예외
exception calendar.IllegalMonthError(month):ValueError와IndexError의 서브클래스. 주어진 월 번호가 1~12(포함) 범위 밖일 때 발생. (3.12부터 ValueError의 서브클래스이기도 해요. 새 코드는 IndexError를 잡지 않는 게 좋아요.)month속성은 잘못된 월 번호.exception calendar.IllegalWeekdayError(weekday):ValueError의 서브클래스. 주어진 요일 번호가 0~6(포함) 범위 밖일 때 발생.weekday속성은 잘못된 요일 번호.
커맨드라인 사용법
calendar 모듈은 커맨드라인에서 스크립트로 실행돼 대화형으로 달력을 출력할 수 있어요.
python -m calendar [-h] [-L LOCALE] [-e ENCODING] [-t {text,html}]
[-w WIDTH] [-l LINES] [-s SPACING] [-m MONTHS] [-c CSS]
[-f FIRST_WEEKDAY] [year] [month]
주요 옵션: --locale/-L(월·요일 이름 로케일, 기본 영어), --encoding/-e(출력 인코딩, --locale 설정 시 필수), --type/-t(text 또는 html), --first-weekday/-f(06, 기본 0), 12, 텍스트 모드 전용). 텍스트 모드 옵션: year(기본 현재 연도), month(1--width/-w(날짜 열 너비, 기본 2), --lines/-l(주당 줄 수, 기본 1), --spacing/-s(월 사이 간격, 기본 6), --months/-m(행당 월 수, 기본 3). HTML 모드 옵션: --css/-c(스타일시트 경로). 3.14부터 기본적으로 오늘 날짜가 색으로 강조되고 환경 변수로 제어할 수 있어요.
참고: datetime(날짜·시간의 객체 지향 인터페이스), time(저수준 시간 함수) 모듈도 함께 보세요.