calendar
--- 日歷相關(guān)函數(shù)?
源代碼: Lib/calendar.py
這個(gè)模塊讓你可以輸出像 Unix cal 那樣的日歷,它還提供了其它與日歷相關(guān)的實(shí)用函數(shù)。 默認(rèn)情況下,這些日歷把星期一當(dāng)作一周的第一天,星期天為一周的最后一天(按照歐洲慣例)。 可以使用 setfirstweekday()
方法設(shè)置一周的第一天為星期天 (6) 或者其它任意一天。 使用整數(shù)作為指定日期的參數(shù)。 更多相關(guān)的函數(shù),參見(jiàn) datetime
和 time
模塊。
在這個(gè)模塊中定義的函數(shù)和類(lèi)都基于一個(gè)理想化的日歷,現(xiàn)行公歷向過(guò)去和未來(lái)兩個(gè)方向無(wú)限擴(kuò)展。這與 Dershowitz 和 Reingold 的書(shū) "歷法計(jì)算" 中所有計(jì)算的基本日歷 -- "proleptic Gregorian" 日歷的定義相符合。 ISO 8601標(biāo)準(zhǔn)還規(guī)定了 0 和 負(fù)數(shù)年份。0年指公元前1年, -1年指公元前2年,依此類(lèi)推。
- class calendar.Calendar(firstweekday=0)?
Creates a
Calendar
object. firstweekday is an integer specifying the first day of the week.MONDAY
is0
(the default),SUNDAY
is6
.Calendar
對(duì)象提供了一些可被用于準(zhǔn)備日歷數(shù)據(jù)格式化的方法。 這個(gè)類(lèi)本身不執(zhí)行任何格式化操作。 這部分任務(wù)應(yīng)由子類(lèi)來(lái)完成。Calendar
類(lèi)的實(shí)例有下列方法:- iterweekdays()?
返回一個(gè)迭代器,迭代器的內(nèi)容為一星期的數(shù)字。迭代器的第一個(gè)值與
firstweekday
屬性的值一至。
- itermonthdates(year, month)?
返回一個(gè)迭代器,迭代器的內(nèi)容為 year 年 month 月(1-12)的日期。這個(gè)迭代器返回當(dāng)月的所有日期 (
datetime.date
對(duì)象),日期包含了本月頭尾用于組成完整一周的日期。
- itermonthdays(year, month)?
返回一個(gè)迭代器,迭代器的內(nèi)容與
itermonthdates()
類(lèi)似,為 year 年 month 月的日期,但不受datetime.date
范圍限制。返回的日期為當(dāng)月每一天的日期對(duì)應(yīng)的天數(shù)。對(duì)于不在當(dāng)月的日期,顯示為0
。
- itermonthdays2(year, month)?
返回一個(gè)迭代器,迭代器的內(nèi)容與
itermonthdates()
類(lèi)似為 year 年 month 月的日期,但不受datetime.date
范圍的限制。迭代器中的元素為一個(gè)由日期和代表星期幾的數(shù)字組成的的元組。
- itermonthdays3(year, month)?
返回一個(gè)迭代器,迭代器的內(nèi)容與
itermonthdates()
類(lèi)似為 year 年 month 月的日期,但不受datetime.date
范圍的限制。迭代器的元素為一個(gè)由年,月,日組成的元組。3.7 新版功能.
- itermonthdays4(year, month)?
返回一個(gè)迭代器,迭代器的內(nèi)容與
itermonthdates()
類(lèi)似為 year 年 month 月的日期,但不受datetime.date
范圍的限制。迭代器的元素為一個(gè)由年,月,日和代表星期幾的數(shù)字組成的元組。3.7 新版功能.
- monthdatescalendar(year, month)?
返回一個(gè)表示指定年月的周列表。周列表由七個(gè)
datetime.date
對(duì)象組成。
- monthdays2calendar(year, month)?
返回一個(gè)表示指定年月的周列表。周列表由七個(gè)代表日期的數(shù)字和代表周幾的數(shù)字組成的二元元組。
- monthdayscalendar(year, month)?
返回一個(gè)表示指定年月的周列表。周列表由七個(gè)代表日期的數(shù)字組成。
- yeardatescalendar(year, width=3)?
返回可以用來(lái)格式化的指定年月的數(shù)據(jù)。返回的值是一個(gè)列表,列表是月份組成的行。每一行包含了最多 width 個(gè)月(默認(rèn)為3)。每個(gè)月包含了4到6周,每周包含1--7天。每一天使用
datetime.date
對(duì)象。
- yeardays2calendar(year, width=3)?
返回可以用來(lái)模式化的指定年月的數(shù)據(jù)(與
yeardatescalendar()
類(lèi)似)。周列表的元素是由表示日期的數(shù)字和表示星期幾的數(shù)字組成的元組。不在這個(gè)月的日子為0。
- yeardayscalendar(year, width=3)?
返回可以用來(lái)模式化的指定年月的數(shù)據(jù)(與
yeardatescalendar()
類(lèi)似)。周列表的元素是表示日期的數(shù)字。不在這個(gè)月的日子為0。
- class calendar.TextCalendar(firstweekday=0)?
可以使用這個(gè)類(lèi)生成純文本日歷。
TextCalendar
實(shí)例有以下方法:- formatmonth(theyear, themonth, w=0, l=0)?
返回一個(gè)多行字符串來(lái)表示指定年月的日歷。w 為日期的寬度,但始終保持日期居中。l 指定了每星期占用的行數(shù)。以上這些還依賴(lài)于構(gòu)造器或者
setfirstweekday()
方法指定的周的第一天是哪一天。
- prmonth(theyear, themonth, w=0, l=0)?
與
formatmonth()
方法一樣,返回一個(gè)月的日歷。
- formatyear(theyear, w=2, l=1, c=6, m=3)?
返回一個(gè)多行字符串,這個(gè)字符串為一個(gè) m 列日歷??蛇x參數(shù) w, l, 和 c 分別表示日期列數(shù), 周的行數(shù), 和月之間的間隔。同樣,以上這些還依賴(lài)于構(gòu)造器或者
setfirstweekday()
指定哪一天為一周的第一天。日歷的第一年由平臺(tái)依賴(lài)于使用的平臺(tái)。
- pryear(theyear, w=2, l=1, c=6, m=3)?
與
formatyear()
方法一樣,返回一整年的日歷。
- class calendar.HTMLCalendar(firstweekday=0)?
可以使用這個(gè)類(lèi)生成 HTML 日歷。
HTMLCalendar
實(shí)例有以下方法:- formatmonth(theyear, themonth, withyear=True)?
返回一個(gè) HTML 表格作為指定年月的日歷。 withyear 為真,則年份將會(huì)包含在表頭,否則只顯示月份。
- formatyear(theyear, width=3)?
返回一個(gè) HTML 表格作為指定年份的日歷。 width (默認(rèn)為3) 用于規(guī)定每一行顯示月份的數(shù)量。
- formatyearpage(theyear, width=3, css='calendar.css', encoding=None)?
返回一個(gè)完整的 HTML 頁(yè)面作為指定年份的日歷。 width*(默認(rèn)為3) 用于規(guī)定每一行顯示的月份數(shù)量。 *css 為層疊樣式表的名字。如果不使用任何層疊樣式表,可以使用
None
。 encoding 為輸出頁(yè)面的編碼 (默認(rèn)為系統(tǒng)的默認(rèn)編碼)。
HTMLCalendar
有以下屬性,你可以重載它們來(lái)自定義應(yīng)用日歷的樣式。- cssclasses?
一個(gè)對(duì)應(yīng)星期一到星期天的 CSS class 列表。默認(rèn)列表為
cssclasses = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]
可以向每天加入其它樣式
cssclasses = ["mon text-bold", "tue", "wed", "thu", "fri", "sat", "sun red"]
需要注意的是,列表的長(zhǎng)度必須為7。
- cssclass_noday?
工作日的 CSS 類(lèi)在上個(gè)月或下個(gè)月發(fā)生。
3.7 新版功能.
- cssclasses_weekday_head?
用于標(biāo)題行中的工作日名稱(chēng)的 CSS 類(lèi) 列表。默認(rèn)值與
cssclasses
相同。3.7 新版功能.
- cssclass_month_head?
月份的頭 CSS 類(lèi)(由
formatmonthname()
使用)。默認(rèn)值為"month"
。3.7 新版功能.
- cssclass_month?
某個(gè)月的月歷的 CSS 類(lèi)(由
formatmonth()
使用)。默認(rèn)值為"month"
。3.7 新版功能.
- cssclass_year?
某年的年歷的 CSS 類(lèi)(由
formatyear()
使用)。默認(rèn)值為"year"
。3.7 新版功能.
- cssclass_year_head?
年歷的·表頭 CSS 類(lèi)(由
formatyear()
使用)。默認(rèn)值為"year"
。3.7 新版功能.
需要注意的是,盡管上面命名的樣式類(lèi)都是單獨(dú)出現(xiàn)的(如:
cssclass_month
cssclass_noday
), 但我們可以使用空格將樣式類(lèi)列表中的多個(gè)元素分隔開(kāi),例如:"text-bold text-red"
下面是一個(gè)如何自定義
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)?
This subclass of
TextCalendar
can be passed a locale name in the constructor and will return month and weekday names in the specified locale.
- class calendar.LocaleHTMLCalendar(firstweekday=0, locale=None)?
This subclass of
HTMLCalendar
can be passed a locale name in the constructor and will return month and weekday names in the specified locale.
備注
The constructor, formatweekday()
and formatmonthname()
methods
of these two classes temporarily change the LC_TIME
locale to the given
locale. Because the current locale is a process-wide setting, they are
not thread-safe.
對(duì)于簡(jiǎn)單的文本日歷,這個(gè)模塊提供了以下方法。
- calendar.setfirstweekday(weekday)?
設(shè)置每一周的開(kāi)始(
0
表示星期一,6
表示星期天)。calendar還提供了MONDAY
,TUESDAY
,WEDNESDAY
,THURSDAY
,FRIDAY
,SATURDAY
和SUNDAY
幾個(gè)常量方便使用。例如,設(shè)置每周的第一天為星期天import calendar calendar.setfirstweekday(calendar.SUNDAY)
- calendar.firstweekday()?
返回當(dāng)前設(shè)置的每星期的第一天的數(shù)值。
- calendar.leapdays(y1, y2)?
返回在范圍 y1 至 y2 (包含 y1 和 y2 )之間的閏年的年數(shù),其中 y1 和 y2 是年份。
此函數(shù)適用于跨越一個(gè)世紀(jì)變化的范圍。
- calendar.weekday(year, month, day)?
返回某年(
1970
-- ...),某月(1
--12
),某日(1
--31
)是星期幾(0
是星期一)。
- calendar.weekheader(n)?
返回一個(gè)包含星期幾的縮寫(xiě)名的頭。 n 指定星期幾縮寫(xiě)的字符寬度。
- calendar.monthrange(year, month)?
返回指定 年份 的指定 月份 的第一天是星期幾和這個(gè)月的天數(shù)。
- calendar.monthcalendar(year, month)?
返回表示一個(gè)月的日歷的矩陣。 每一行代表一周;此月份外的日子由零表示。 每周從周一開(kāi)始,除非使用
setfirstweekday()
改變?cè)O(shè)置。
- calendar.month(theyear, themonth, w=0, l=0)?
使用
TextCalendar
類(lèi)的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
類(lèi)的formatyear()
返回整年的3列的日歷以多行字符串的形式。
- calendar.timegm(tuple)?
一個(gè)不相關(guān)但很好用的函數(shù),它接受一個(gè)時(shí)間元組例如
time
模塊中的gmtime()
函數(shù)的返回并返回相應(yīng)的 Unix 時(shí)間戳值,假定 1970 年開(kāi)始計(jì)數(shù), POSIX 編碼。實(shí)際上,time.gmtime()
和timegm()
是彼此相反的。
calendar
模塊導(dǎo)出以下數(shù)據(jù)屬性:
- calendar.day_name?
在當(dāng)前語(yǔ)言環(huán)境下表示星期幾的數(shù)組。
- calendar.day_abbr?
在當(dāng)前語(yǔ)言環(huán)境下表示星期幾縮寫(xiě)的數(shù)組。
- calendar.month_name?
在當(dāng)前語(yǔ)言環(huán)境下表示一年中月份的數(shù)組。這遵循一月的月號(hào)為 1 的通常慣例,所以它的長(zhǎng)度為 13 且
month_name[0]
是空字符串。
- calendar.month_abbr?
在當(dāng)前語(yǔ)言環(huán)境下表示月份簡(jiǎn)寫(xiě)的數(shù)組。這遵循一月的月號(hào)為 1 的通常慣例,所以它的長(zhǎng)度為 13 且
month_abbr[0]
是空字符串。