calendar — 일반 달력 관련 함수
calendar — 일반 달력 관련 함수 (General calendar-related functions)
Unix의 cal 프로그램처럼 달력을 출력할 수 있게 해주고, 달력과 관련된 유용한 추가 함수를 제공하는 모듈이에요.
출처: Python 표준 라이브러리
본문
이 모듈은 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)— 주의 첫 요일을 int(0–6)로 전달된firstweekday로 설정해요.firstweekday속성을 설정하는 것과 동일해요.iterweekdays()— 한 주에 사용될 요일 번호의 iterator를 반환해요. iterator의 첫 번째 값은firstweekday속성의 값과 같아요.itermonthdates(year, month)— 연도year의 월month(1–12)에 대한 iterator를 반환해요. 이 iterator는 그 달의 모든 날(datetime.date객체로)과, 완전한 주를 얻는 데 필요한 월 시작 전이나 월 끝 뒤의 모든 날을 반환해요.itermonthdays(year, month)— 연도year의 월month에 대한itermonthdates()와 비슷한 iterator를 반환하지만datetime.date범위에 제한받지 않아요. 반환되는 날은 단순히 월의 날짜 번호예요. 지정된 월 밖의 날은 날짜 번호가 0이에요.itermonthdays2(year, month)—itermonthdates()와 비슷하지만datetime.date범위에 제한받지 않아요. 반환되는 날은 월의 날짜 번호와 요일 번호로 구성된 튜플이에요.itermonthdays3(year, month)—itermonthdates()와 비슷하지만datetime.date범위에 제한받지 않아요. 반환되는 날은 연도, 월, 월의 날짜 번호로 구성된 튜플이에요. 3.7 버전에서 추가.itermonthdays4(year, month)—itermonthdates()와 비슷하지만datetime.date범위에 제한받지 않아요. 반환되는 날은 연도, 월, 월의 날짜, 요일 번호로 구성된 튜플이에요. 3.7 버전에서 추가.monthdatescalendar(year, month)— 연도year의 월month에 대한 주들을 완전한 주의 리스트로 반환해요. 주는 7개의datetime.date객체 리스트예요.monthdays2calendar(year, month)— 연도year의 월month의 주들을 완전한 주의 리스트로 반환해요. 주는 날짜 번호와 요일 번호의 7개 튜플 리스트예요.monthdayscalendar(year, month)— 연도year의 월month의 주들을 완전한 주의 리스트로 반환해요. 주는 7개의 날짜 번호 리스트예요.yeardatescalendar(year, width=3)— 지정된 연도의 포맷팅 준비 데이터를 반환해요. 반환값은 월 행의 리스트예요. 각 월 행은 최대width(기본 3)개의 월을 포함해요. 각 월은 46주를 포함하고 각 주는 17일을 포함해요. 날짜는datetime.date객체예요.yeardays2calendar(year, width=3)— 지정된 연도의 포맷팅 준비 데이터를 반환해요(yeardatescalendar()와 유사). 주 리스트의 항목은 날짜 번호와 요일 번호의 튜플이에요. 이 달 밖의 날짜 번호는 0이에요.yeardayscalendar(year, width=3)— 지정된 연도의 포맷팅 준비 데이터를 반환해요(yeardatescalendar()와 유사). 주 리스트의 항목은 날짜 번호예요. 이 달 밖의 날짜 번호는 0이에요.
class calendar.TextCalendar(firstweekday=0)
이 클래스는 평문 텍스트 달력을 생성하는 데 사용할 수 있어요.
TextCalendar 인스턴스의 메서드:
formatday(theday, weekday, width)— 주어진width로 포맷된 단일 날을 나타내는 문자열을 반환해요.theday가 0이면 빈 날을 나타내는 지정된width의 공백 문자열을 반환해요.weekday매개변수는 사용되지 않아요.formatweek(theweek, w=0)— 새 줄 없는 단일 주를 문자열로 반환해요.w가 제공되면 가운데 정렬되는 날짜 열의 너비를 지정해요. 생성자에서 지정되거나setfirstweekday()메서드로 설정된 주의 첫 요일에 의존해요.formatweekday(weekday, width)— 지정된width로 포맷된 단일 요일 이름을 나타내는 문자열을 반환해요.weekday매개변수는 요일을 나타내는 정수로, 0은 월요일이고 6은 일요일이에요.formatweekheader(width)— 각 열에 대해 주어진width로 포맷된 요일 이름의 헤더 행을 포함한 문자열을 반환해요. 이름은 로케일 설정에 따라 달라지고 지정된 너비로 패딩돼요.formatmonth(theyear, themonth, w=0, l=0)— 달의 달력을 여러 줄 문자열로 반환해요.w가 제공되면 가운데 정렬되는 날짜 열의 너비를 지정해요.l이 주어지면 각 주가 사용할 줄 수를 지정해요. 생성자에서 지정되거나setfirstweekday()로 설정된 주의 첫 요일에 의존해요.formatmonthname(theyear, themonth, width=0, withyear=True)— 지정된 너비 안에 가운데 정렬된 월 이름을 나타내는 문자열을 반환해요.withyear가True면 출력에 연도를 포함해요.theyear와themonth매개변수는 포맷할 이름의 연도와 월을 각각 지정해요.prmonth(theyear, themonth, w=0, l=0)—formatmonth()이 반환한 달의 달력을 출력해요.formatyear(theyear, w=2, l=1, c=6, m=3)— 전체 연도의 m-열 달력을 여러 줄 문자열로 반환해요. 선택 매개변수w,l,c는 각각 날짜 열 너비, 주당 줄 수, 월 열 사이의 공백 수예요. 생성자에서 지정되거나setfirstweekday()로 설정된 주의 첫 요일에 의존해요. 달력을 생성할 수 있는 가장 이른 연도는 플랫폼에 따라 달라요.pryear(theyear, w=2, l=1, c=6, m=3)—formatyear()이 반환한 전체 연도 달력을 출력해요.
class calendar.HTMLCalendar(firstweekday=0)
이 클래스는 HTML 달력을 생성하는 데 사용할 수 있어요.
HTMLCalendar 인스턴스의 메서드:
formatmonth(theyear, themonth, withyear=True)— 달의 달력을 HTML 테이블로 반환해요.withyear가 참이면 연도가 헤더에 포함되고, 그렇지 않으면 월 이름만 사용돼요.formatyear(theyear, width=3)— 연도의 달력을 HTML 테이블로 반환해요.width(기본 3)는 행당 월 수를 지정해요.formatyearpage(theyear, width=3, css='calendar.css', encoding=None)— 연도의 달력을 완전한 HTML 페이지로 반환해요.width(기본 3)는 행당 월 수를 지정해요.css는 사용할 CSS 스타일시트의 이름이에요. 스타일시트를 사용하지 않으려면None을 전달할 수 있어요.encoding은 출력에 사용할 인코딩을 지정해요(기본 시스템 기본 인코딩).formatmonthname(theyear, themonth, withyear=True)— 월 이름을 HTML 테이블 행으로 반환해요.withyear가 참이면 연도가 행에 포함되고, 그렇지 않으면 월 이름만 사용돼요.
달력이 사용하는 CSS 클래스를 커스터마이즈하기 위해 오버라이드할 수 있는 속성:
cssclasses— 각 요일에 사용되는 CSS 클래스 리스트. 기본 클래스 리스트는:
각 날에 더 많은 스타일을 추가할 수 있어요:cssclasses = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]
이 리스트의 길이는 7개 항목이어야 한다는 점을 참고하세요.cssclasses = ["mon text-bold", "tue", "wed", "thu", "fri", "sat", "sun red"]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— 전체 연도 테이블의 테이블(formatyear()에서 사용)의 CSS 클래스. 기본값은year. 3.7 버전에서 추가.cssclass_year_head— 전체 연도 테이블 헤드의 CSS 클래스(formatyear()에서 사용). 기본값은year. 3.7 버전에서 추가.
위에서 설명한 클래스 속성의 명명이 단수 형태(예: cssclass_month, cssclass_noday)이지만 단일 CSS 클래스를 공백으로 구분된 CSS 클래스 리스트로 대체할 수 있다는 점을 참고하세요. 예를 들어:
"text-bold text-red"
HTMLCalendar를 커스터마이즈하는 방법의 예:
class CustomHTMLCal(calendar.HTMLCalendar):
cssclasses = [style + " text-nowrap" for style in
calendar.HTMLCalendar.cssclasses]
cssclass_month_head = "text-center month-head"
cssclass_month = "text-center month"
cssclass_year = "text-italic lead"
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, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY 값이 제공돼요. 예를 들어 주의 첫 요일을 일요일로 설정하려면:
import calendar
calendar.setfirstweekday(calendar.SUNDAY)
calendar.firstweekday()
각 주를 시작할 요일의 현재 설정을 반환해요.
calendar.isleap(year)
year가 윤년이면 True를, 그렇지 않으면 False를 반환해요.
calendar.leapdays(y1, y2)
y1에서 y2까지(배타적) 범위의 윤년 수를 반환해요. y1과 y2는 연도예요. 이 함수는 세기 전환을 가로지르는 범위에서도 동작해요.
calendar.weekday(year, month, day)
year(1970–…), month(1–12), day(1–31)에 대한 요일(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() 함수가 반환한 것 같은 시간 튜플을 받아 대응하는 Unix 타임스탬프 값을 반환해요. epoch 1970과 POSIX 인코딩을 가정해요. 실제로 time.gmtime()과 timegm()은 서로의 역함수예요.
데이터 속성
calendar 모듈은 다음 데이터 속성을 내보내요:
calendar.day_name
현재 로케일의 요일을 나타내는 시퀀스로, 월요일이 날짜 번호 0이에요.
>>> import calendar
>>> list(calendar.day_name)
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
calendar.day_abbr
현재 로케일의 축약된 요일을 나타내는 시퀀스로, Mon이 날짜 번호 0이에요.
>>> import calendar
>>> list(calendar.day_abbr)
['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
calendar.MONDAY / calendar.TUESDAY / calendar.WEDNESDAY / calendar.THURSDAY / calendar.FRIDAY / calendar.SATURDAY / calendar.SUNDAY
요일의 별칭으로, MONDAY는 0이고 SUNDAY는 6이에요. 3.12 버전에서 추가.
class calendar.Day
요일을 정수 상수로 정의하는 열거형. 이 열거형의 멤버는 모듈 범위로 MONDAY부터 SUNDAY까지 내보내져요. 3.12 버전에서 추가.
calendar.month_name
현재 로케일의 연중 월을 나타내는 시퀀스. 1월이 월 번호 1인 일반 관례를 따르므로 길이가 13이고 month_name[0]은 빈 문자열이에요.
>>> import calendar
>>> list(calendar.month_name)
['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
calendar.month_abbr
현재 로케일의 축약된 연중 월을 나타내는 시퀀스. 1월이 월 번호 1인 일반 관례를 따르므로 길이가 13이고 month_abbr[0]은 빈 문자열이에요.
>>> import calendar
>>> list(calendar.month_abbr)
['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
calendar.JANUARY / calendar.FEBRUARY / calendar.MARCH / calendar.APRIL / calendar.MAY / calendar.JUNE / calendar.JULY / calendar.AUGUST / calendar.SEPTEMBER / calendar.OCTOBER / calendar.NOVEMBER / calendar.DECEMBER
연중 월의 별칭으로, JANUARY는 1이고 DECEMBER는 12예요. 3.12 버전에서 추가.
class calendar.Month
연중 월을 정수 상수로 정의하는 열거형. 이 열거형의 멤버는 모듈 범위로 JANUARY부터 DECEMBER까지 내보내져요. 3.12 버전에서 추가.
예외
calendar 모듈은 다음 예외를 정의해요:
exception calendar.IllegalMonthError(month)
주어진 월 번호가 1-12(포함) 범위를 벗어나면 발생하는 ValueError와 IndexError의 서브클래스. 3.12 버전 변경: IllegalMonthError는 이제 ValueError의 서브클래스이기도 해요. 새 코드는 IndexError를 잡는 것을 피해야 해요.
month— 잘못된 월 번호.
exception calendar.IllegalWeekdayError(weekday)
주어진 요일 번호가 0-6(포함) 범위를 벗어나면 발생하는 ValueError의 서브클래스.
weekday— 잘못된 요일 번호.
더 알아보기
- Module
datetime—time모듈과 유사한 기능을 가진 날짜·시간의 객체 지향 인터페이스. - Module
time— 저수준 시간 관련 함수.
커맨드라인 사용
2.5 버전에서 추가.
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]
예를 들어 2000년의 달력을 출력하려면:
$ python -m calendar 2000
다음 옵션이 받아들여져요:
--help, -h— 도움말 메시지를 보여주고 종료.--locale LOCALE, -L LOCALE— 월·요일 이름에 사용할 로케일. 기본값은 영어.--encoding ENCODING, -e ENCODING— 출력에 사용할 인코딩.--locale이 설정되면--encoding이 필수예요.--type {text,html}, -t {text,html}— 달력을 텍스트 또는 HTML 문서로 터미널에 출력.--first-weekday FIRST_WEEKDAY, -f FIRST_WEEKDAY— 각 주를 시작할 요일. 0(월요일)~6(일요일) 사이의 숫자여야 해요. 기본값은 0. 3.13 버전에서 추가.year— 달력을 출력할 연도. 기본값은 현재 연도.month— 지정된 연도의, 달력을 출력할 월. 1~12 사이의 숫자여야 하고 텍스트 모드에서만 사용할 수 있어요. 기본적으로 전체 연도 달력이 출력돼요.
텍스트 모드 옵션:
--width WIDTH, -w WIDTH— 터미널 열에서의 날짜 열 너비. 날짜는 열 안에 가운데 정렬돼요. 2보다 낮은 값은 무시돼요. 기본값은 2.--lines LINES, -l LINES— 터미널 행에서 각 주에 대한 줄 수. 날짜는 위쪽 정렬로 출력돼요. 1보다 낮은 값은 무시돼요. 기본값은 1.--spacing SPACING, -s SPACING— 열 사이의 월 사이 공간. 2보다 낮은 값은 무시돼요. 기본값은 6.--months MONTHS, -m MONTHS— 행당 출력되는 월 수. 기본값은 3.
3.14 버전 변경: 기본적으로 오늘 날짜가 색상으로 강조되며 환경 변수로 제어할 수 있어요.
HTML 모드 옵션:
--css CSS, -c CSS— 달력에 사용할 CSS 스타일시트의 경로. 생성된 HTML에 상대적이거나, 절대 HTTP 또는file:///URL이어야 해요.