"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*는 주의 첫 번째 날을 지정
   하는 정수입니다. "0"은 월요일(기본값)이고, "6"은 일요일입니다.

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

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

   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" 범위로 제한되지 않습니다.
      반환된 날은 연도, 월 및 월 중 날 번호로 구성된 튜플입니다.

      버전 3.7에 추가.

   itermonthdays4(year, month)

      "itermonthdates()"와 유사하게 *year* 연도의 *month* 월 동안의 이
      터레이터를 반환하지만, "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)이 포함
      됩니다. 각 월은 4--6주를 포함하고, 각 주는 1--7일을 포함합니다.
      날은 "datetime.date" 객체입니다.

   yeardays2calendar(year, width=3)

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

   yeardayscalendar(year, width=3)

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

class calendar.TextCalendar(firstweekday=0)

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

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

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

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

   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*은 출력에 사용될 인코딩을 지정합니다
      (기본값은 시스템 기본 인코딩입니다).

   "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 클래스.

      버전 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에 추가.

   위에서 설명한 클래스 어트리뷰트의 이름은 단수이지만 (예를 들어
   "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()" 메서드는 현재
  로케일을 주어진 *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

   현재 로케일의 요일을 나타내는 배열.

calendar.day_abbr

   현재 로케일의 약식 요일을 나타내는 배열.

calendar.month_name

   현재 로케일에서 연중 월을 나타내는 배열. 이는 1월이 월 번호 1인 일
   반적인 규칙을 따르므로, 길이는 13이고 "month_name[0]"은 빈 문자열입
   니다.

calendar.month_abbr

   현재 로케일에서 연중 약식 월을 나타내는 배열. 이는 1월이 월 번호 1
   인 일반적인 규칙을 따르므로, 길이는 13이고 "month_abbr[0]"은 빈 문
   자열입니다.

더 보기:

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

  모듈 "time"
     저수준 시간 관련 함수.
