"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()"은 서로의 역 함수입니다.

The "calendar" module exports the following data attributes:

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.

The "calendar" module defines the following exceptions:

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.
