# `calendar` — 일반 달력 관련 함수

소스 코드: Lib/calendar.py

이 모듈을 사용하면 유닉스 cal 프로그램과 같은 달력을 출력할 수 있으며, 달력과 관련된 유용한 추가 함수를 제공합니다. 기본적으로, 이 달력은 월요일을 주의 첫째 날로 하고, 일요일을 마지막 날로 합니다 (유럽 관례). 주의 첫째 날을 일요일(6)이나 다른 요일로 설정하려면 `setfirstweekday()`를 사용하십시오. 날짜를 지정하는 매개 변수는 정수로 제공됩니다. 관련 기능에 대해서는, `datetime`과 `time` 모듈도 참조하십시오.

이 모듈에 정의된 함수와 클래스는 이상적인 달력을 사용합니다, 양방향으로 무한정 확장된 현재 그레고리력. 이것은 Dershowitz와 Reingold의 저서 “Calendrical Calculations”에 나오는 “역산 그레고리(proleptic Gregorian)” 달력의 정의와 일치하며, 모든 계산의 기본 달력입니다. 0과 음의 연도는 ISO 8601 표준에 규정된 대로 해석됩니다. 0년은 BC 1년, -1년은 BC 2년 등입니다.

class calendar.Calendar(firstweekday=0)

  `Calendar` 객체를 만듭니다. firstweekday는 주의 첫 번째 날을 지정하는 정수입니다. `MONDAY`는 `0`(기본값)이고, `SUNDAY`는 `6`입니다.

  `Calendar` 객체는 포매팅을 위해 달력 데이터를 준비하는 데 사용할 수 있는 몇 가지 메서드를 제공합니다. 이 클래스는 스스로 포매팅을 수행하지 않습니다. 이는 서브 클래스의 역할입니다.

  `Calendar` 인스턴스에는 다음과 같은 메서드와 어트리뷰트가 있습니다:

  firstweekday

    The first weekday as an integer (0–6).

    This property can also be set and read using `setfirstweekday()` and `getfirstweekday()` respectively.

  getfirstweekday()

    Return an `int` for the current first weekday (0–6).

    Identical to reading the `firstweekday` property.

  setfirstweekday(firstweekday)

    Set the first weekday to firstweekday, passed as an `int` (0–6)

    Identical to setting the `firstweekday` property.

  iterweekdays()

    한 주 동안 사용될 요일 번호의 이터레이터를 반환합니다. 이터레이터의 첫 번째 값은 `firstweekday` 프로퍼티 값과 같습니다.

  itermonthdates(year, month)

    year 연도의 month 월 (1–12) 동안의 이터레이터를 반환합니다. 이 이터레이터는 해당 월의 모든 날(`datetime.date` 객체로)과 완전한 주를 얻기 위해 필요한 해당 월의 시작일 전이나 해당 월의 종료일 이후의 모든 날을 반환합니다.

  itermonthdays(year, month)

    `itermonthdates()`와 유사하게 year 연도의 month 월 동안의 이터레이터를 반환하지만, `datetime.date` 범위로 제한되지 않습니다. 반환된 날은 단순히 월 중 날 번호입니다. 지정된 월 바깥에 있는 날의 경우, 날 번호는 `0`입니다.

  itermonthdays2(year, month)

    `itermonthdates()`와 유사하게 year 연도의 month 월 동안의 이터레이터를 반환하지만, `datetime.date` 범위로 제한되지 않습니다. 반환된 날은 월 중 날 번호와 요일 번호로 구성된 튜플입니다.

  itermonthdays3(year, month)

    `itermonthdates()`와 유사하게 year 연도의 month 월 동안의 이터레이터를 반환하지만, `datetime.date` 범위로 제한되지 않습니다. 반환된 날은 연도, 월 및 월 중 날 번호로 구성된 튜플입니다.

    Added in version 3.7.

  itermonthdays4(year, month)

    `itermonthdates()`와 유사하게 year 연도의 month 월 동안의 이터레이터를 반환하지만, `datetime.date` 범위로 제한되지 않습니다. 반환된 날은 연도, 월, 월 중 날 및 요일 번호로 구성된 튜플입니다.

    Added in version 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)이 포함됩니다. 각 월은 4–6주를 포함하고, 각 주는 1–7일을 포함합니다. 날은 `datetime.date` 객체입니다.

  yeardays2calendar(year, width=3)

    포매팅 준비된 지정된 연도의 데이터를 반환합니다 (`yeardatescalendar()`와 유사합니다). 주 리스트의 항목은 날 번호와 요일 번호의 튜플입니다. 이달 밖의 날 번호는 0입니다.

  yeardayscalendar(year, width=3)

    포매팅 준비된 지정된 연도의 데이터를 반환합니다 (`yeardatescalendar()`와 유사합니다). 주 리스트의 항목은 날 번호입니다. 이달 밖의 날 번호는 0입니다.

class calendar.TextCalendar(firstweekday=0)

  이 클래스는 평문 텍스트 달력을 생성하는 데 사용할 수 있습니다.

  `TextCalendar` 인스턴스에는 다음과 같은 메서드가 있습니다:

  formatday(theday, weekday, width)

    Return a string representing a single day formatted with the given width. If theday is `0`, return a string of spaces of the specified width, representing an empty day. The weekday parameter is unused.

  formatweek(theweek, w=0)

    한 주를 줄 넘김이 없는 문자열로 반환합니다. w가 제공되면, 가운데 정렬되는 날짜 열의 너비를 지정합니다. 생성자에 지정되거나 `setfirstweekday()` 메서드로 설정된 첫 번째 요일에 따라 다릅니다.

  formatweekday(weekday, width)

    Return a string representing the name of a single weekday formatted to the specified width. The weekday parameter is an integer representing the day of the week, where `0` is Monday and `6` is Sunday.

  formatweekheader(width)

    Return a string containing the header row of weekday names, formatted with the given width for each column. The names depend on the locale settings and are padded to the specified width.

  formatmonth(theyear, themonth, w=0, l=0)

    월의 달력을 여러 줄 문자열로 반환합니다. w가 제공되면, 가운데 정렬되는 날짜 열의 너비를 지정합니다. l이 제공되면, 각 주가 사용할 줄 수를 지정합니다. 생성자에 지정되거나 `setfirstweekday()` 메서드로 설정된 첫 번째 요일에 따라 다릅니다.

  formatmonthname(theyear, themonth, width=0, withyear=True)

    Return a string representing the month’s name centered within the specified width. If withyear is `True`, include the year in the output. The theyear and themonth parameters specify the year and month for the name to be formatted respectively.

  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는 사용할 캐스케이딩 스타일 시트의 이름입니다. 스타일 시트를 사용하지 않으면 `None`을 전달할 수 있습니다. encoding은 출력에 사용될 인코딩을 지정합니다 (기본값은 시스템 기본 인코딩입니다).

  formatmonthname(theyear, themonth, withyear=True)

    월 이름을 HTML 테이블 행으로 반환합니다. withyear가 참이면 연도가 행에 포함되고, 그렇지 않으면 월 이름 만 사용됩니다.

  `HTMLCalendar`에는 달력에서 사용하는 CSS 클래스를 사용자 정의하기 위해 재정의할 수 있는 다음과 같은 어트리뷰트가 있습니다:

  cssclasses

    각 요일에 사용되는 CSS 클래스 리스트. 기본 클래스 리스트는 다음과 같습니다:

        cssclasses = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]

    각 날에 더 많은 스타일을 추가할 수 있습니다:

        cssclasses = ["mon text-bold", "tue", "wed", "thu", "fri", "sat", "sun red"]

    이 리스트의 길이는 7개의 항목임에 유의하십시오.

  cssclass_noday

    지난달이나 다음 달에 등장하는 요일의 CSS 클래스.

    Added in version 3.7.

  cssclasses_weekday_head

    헤더 행에 있는 요일 이름에 사용되는 CSS 클래스 리스트. 기본값은 `cssclasses`와 같습니다.

    Added in version 3.7.

  cssclass_month_head

    월 헤드 CSS 클래스 (`formatmonthname()` 에서 사용됩니다). 기본값은 `"month"`입니다.

    Added in version 3.7.

  cssclass_month

    월 전체 테이블의 CSS 클래스 (`formatmonth()`에서 사용됩니다). 기본값은 `"month"`입니다.

    Added in version 3.7.

  cssclass_year

    연도 전체 표의 CSS 클래스 (`formatyear()`에서 사용됩니다). 기본값은 `"year"`입니다.

    Added in version 3.7.

  cssclass_year_head

    연도 전체의 테이블 헤드의 CSS 클래스 (`formatyear()`에서 사용됩니다). 기본값은 `"year"`입니다.

    Added in version 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` 로케일을 주어진 locale로 임시 변경합니다. 현재 로케일은 프로세스 전체 설정이므로, 스레드 안전하지 않습니다.

간단한 텍스트 달력을 위해 이 모듈은 다음 함수를 제공합니다.

calendar.setfirstweekday(weekday)

  매주 시작일을 weekday(`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는 연도입니다.

  이 함수는 세기(century)의 변경을 포함하는 범위에서 작동합니다.

calendar.weekday(year, month, day)

  year (`1970`–…), month (`1`–`12`), day (`1`–`31`)의 요일(`0`은 월요일)을 반환합니다.

calendar.weekheader(n)

  약식 요일 이름이 포함된 헤더를 반환합니다. n은 한 주의 너비를 문자 수로 지정합니다.

calendar.monthrange(year, month)

  지정된 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(year, w=0, l=0, c=6, m=3)

  `calendar()`에서 반환 한 연도 전체 달력을 인쇄합니다.

calendar.calendar(year, w=2, l=1, c=6, m=3)

  `TextCalendar` 클래스의 `formatyear()`를 사용하여 전체 연도의 3-열 달력을 여러 줄 문자열로 반환합니다.

calendar.timegm(tuple)

  `time` 모듈의 `gmtime()` 함수가 반환하는 것과 같은 시간 튜플을 취하고, 1970년의 시작과 POSIX 인코딩을 가정하는 해당 유닉스 타임스탬프 값을 반환하는 관련이 없지만 편리한 함수. 실제로, `time.gmtime()`과 `timegm()`은 서로의 역 함수입니다.

`calendar` 모듈은 다음 데이터 어트리뷰트를 내보냅니다:

calendar.day_name

  현재 로케일의 요일을 나타내는 시퀀스, 여기서 Monday 는 요일 번호 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

  Aliases for the days of the week, where `MONDAY` is `0` and `SUNDAY` is `6`.

  Added in version 3.12.

class calendar.Day

  Enumeration defining days of the week as integer constants. The members of this enumeration are exported to the module scope as `MONDAY` through `SUNDAY`.

  Added in version 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

  Aliases for the months of the year, where `JANUARY` is `1` and `DECEMBER` is `12`.

  Added in version 3.12.

class calendar.Month

  Enumeration defining months of the year as integer constants. The members of this enumeration are exported to the module scope as `JANUARY` through `DECEMBER`.

  Added in version 3.12.

`calendar` 모듈은 다음 예외를 정의합니다:

exception calendar.IllegalMonthError(month)

  A subclass of `ValueError`, raised when the given month number is outside of the range 1-12 (inclusive).

  month

    The invalid month number.

exception calendar.IllegalWeekdayError(weekday)

  A subclass of `ValueError`, raised when the given weekday number is outside of the range 0-6 (inclusive).

  weekday

    The invalid weekday number.

더 보기

모듈 `datetime`

  `time` 모듈과 유사한 기능을 가진 날짜와 시간에 대한 객체 지향 인터페이스.

모듈 `time`

  저수준 시간 관련 함수.

## Command-line usage

Added in version 2.5.

The `calendar` module can be executed as a script from the command line to interactively print a 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]

For example, to print a calendar for the year 2000:

    $ python -m calendar 2000
                                      2000

          January                   February                   March
    Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                    1  2          1  2  3  4  5  6             1  2  3  4  5
     3  4  5  6  7  8  9       7  8  9 10 11 12 13       6  7  8  9 10 11 12
    10 11 12 13 14 15 16      14 15 16 17 18 19 20      13 14 15 16 17 18 19
    17 18 19 20 21 22 23      21 22 23 24 25 26 27      20 21 22 23 24 25 26
    24 25 26 27 28 29 30      28 29                     27 28 29 30 31
    31

           April                      May                       June
    Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                    1  2       1  2  3  4  5  6  7                1  2  3  4
     3  4  5  6  7  8  9       8  9 10 11 12 13 14       5  6  7  8  9 10 11
    10 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 18
    17 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 25
    24 25 26 27 28 29 30      29 30 31                  26 27 28 29 30

            July                     August                  September
    Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                    1  2          1  2  3  4  5  6                   1  2  3
     3  4  5  6  7  8  9       7  8  9 10 11 12 13       4  5  6  7  8  9 10
    10 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 17
    17 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 24
    24 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 30
    31

          October                   November                  December
    Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                       1             1  2  3  4  5                   1  2  3
     2  3  4  5  6  7  8       6  7  8  9 10 11 12       4  5  6  7  8  9 10
     9 10 11 12 13 14 15      13 14 15 16 17 18 19      11 12 13 14 15 16 17
    16 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 24
    23 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 31
    30 31

The following options are accepted:

--help, -h

  Show the help message and exit.

--locale LOCALE, -L LOCALE

  The locale to use for month and weekday names. Defaults to English.

--encoding ENCODING, -e ENCODING

  The encoding to use for output. `--encoding` is required if `--locale` is set.

--type {text,html}, -t {text,html}

  Print the calendar to the terminal as text, or as an HTML document.

--first-weekday FIRST_WEEKDAY, -f FIRST_WEEKDAY

  The weekday to start each week. Must be a number between 0 (Monday) and 6 (Sunday). Defaults to 0.

  Added in version 3.13.

year

  The year to print the calendar for. Defaults to the current year.

month

  The month of the specified `year` to print the calendar for. Must be a number between 1 and 12, and may only be used in text mode. Defaults to printing a calendar for the full year.

Text-mode options:

--width WIDTH, -w WIDTH

  The width of the date column in terminal columns. The date is printed centred in the column. Any value lower than 2 is ignored. Defaults to 2.

--lines LINES, -l LINES

  The number of lines for each week in terminal rows. The date is printed top-aligned. Any value lower than 1 is ignored. Defaults to 1.

--spacing SPACING, -s SPACING

  The space between months in columns. Any value lower than 2 is ignored. Defaults to 6.

--months MONTHS, -m MONTHS

  The number of months printed per row. Defaults to 3.

버전 3.14에서 변경: By default, today’s date is highlighted in color and can be controlled using environment variables.

HTML-mode options:

--css CSS, -c CSS

  The path of a CSS stylesheet to use for the calendar. This must either be relative to the generated HTML, or an absolute HTTP or `file:///` URL.