python calendar日历模块

x33g5p2x  于2021-08-23 转载在 Java  
字(7.6k)|赞(0)|评价(0)|浏览(260)

一 前言

calendar是和日历模块,calendar模块文件里定义了很多类型,主要有Calendar,TextCalendar以及HTMLCalendar类型。其中,Calendar是TextCalendar与HTMLCalendar的基类。

公众号:知识追寻者

知识追寻者(Inheriting the spirit of open source, Spreading technology knowledge;)

二 calendar

2.1firstweekday()

firstweekday(): 返回当前每周起始日期值。默认情况下,首次载入calendar模块时返回0,即星期一

import calendar
# 0
print(calendar.firstweekday())

2.2 setfirstweekday()

setfirstweekday(firstweekday) :通过常量 MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY 和 SUNDAY 设置星期;其中 0 表示星期一,以此类推6表示星期日;

import calendar

calendar.setfirstweekday(calendar.SUNDAY)
# 6
print(calendar.firstweekday())

2.3 isleap()

isleap(year):判断是否是闰年,闰年为True,平年为False

import calendar

# False
print(calendar.isleap(2018))
# True
print(calendar.isleap(2016))

2.4 leapdays()

leapdays(y1, y2): 返回[y1,y2)年份之间的闰年数量;

import calendar
# 2 
print(calendar.leapdays(2012, 2020))

2.5weekday

weekday(year, month, day):获取指定日期为星期几

import calendar
# 0 表示星期一
print(calendar.weekday(2020,5,11))

2.6 monthrange()

monthrange(year, month): 返回元组, 第一个值代表给定月份第一天的星期;第二个值代表给定月份有多少天;

import calendar

# (5, 29) -- 表示周六,有29天
print(calendar.monthrange(2020, 2))
# (4, 31) -- 表示周五,有31天
print(calendar.monthrange(2020, 5))

2.7 weekheader()

weekheader(n):返回包含星期的英文缩写,n表示返回缩写的长度;

import calendar
# Sun  Mon  Tue  Wed  Thu  Fri  Sat
print(calendar.weekheader(4))

2.8 monthcalendar()

monthcalendar(year, month): 返回表示一个月的日历的矩阵,每一行代表一周; 可以通过setfirstweekday() 改变默认值;

import calendar
print(calendar.monthcalendar(2020, 5))

输出

[[0, 0, 0, 0, 1, 2, 3],
[4, 5, 6, 7, 8, 9, 10], 
[11, 12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23, 24], 
[25, 26, 27, 28, 29, 30, 31]]

2.9 prmonth()

prmonth(theyear, themonth, w=0, l=0): 打印一个月的日历

  • theyear : 指定年份
  • themonth:指定月份
  • w:日之间的间隔w个字符,默认0;
  • l : 星期之间的行数,默认0;
import calendar
print(calendar.prmonth(2020, 5))

输出

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

2.10 prcal()

prcal(year, w=0, l=0, c=6, m=3) : 打印一年的日历

  1. year: 指定年份
  2. w:日之间的间隔w个字符,默认0;
  3. l : 星期之间的行数,默认0;
  4. c : 月之间的宽度;
  5. m: 将12个月分为m列
import calendar
calendar.prcal(2020, m=4)

输出

                                  2020

      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  3  4  5                      1  2                         1
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       2  3  4  5  6  7  8
13 14 15 16 17 18 19      10 11 12 13 14 15 16       9 10 11 12 13 14 15
20 21 22 23 24 25 26      17 18 19 20 21 22 23      16 17 18 19 20 21 22
27 28 29 30 31            24 25 26 27 28 29         23 24 25 26 27 28 29
                                                    30 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  3  4  5                   1  2  3       1  2  3  4  5  6  7
 6  7  8  9 10 11 12       4  5  6  7  8  9 10       8  9 10 11 12 13 14
13 14 15 16 17 18 19      11 12 13 14 15 16 17      15 16 17 18 19 20 21
20 21 22 23 24 25 26      18 19 20 21 22 23 24      22 23 24 25 26 27 28
27 28 29 30               25 26 27 28 29 30 31      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  3  4  5                      1  2          1  2  3  4  5  6
 6  7  8  9 10 11 12       3  4  5  6  7  8  9       7  8  9 10 11 12 13
13 14 15 16 17 18 19      10 11 12 13 14 15 16      14 15 16 17 18 19 20
20 21 22 23 24 25 26      17 18 19 20 21 22 23      21 22 23 24 25 26 27
27 28 29 30 31            24 25 26 27 28 29 30      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  2  3  4                         1          1  2  3  4  5  6
 5  6  7  8  9 10 11       2  3  4  5  6  7  8       7  8  9 10 11 12 13
12 13 14 15 16 17 18       9 10 11 12 13 14 15      14 15 16 17 18 19 20
19 20 21 22 23 24 25      16 17 18 19 20 21 22      21 22 23 24 25 26 27
26 27 28 29 30 31         23 24 25 26 27 28 29      28 29 30 31
                          30

2.11 day_name

返回星期列表

import calendar
days = [day for day in calendar.day_name]
print(days)

输出

['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

2.12 month_name

返回月份列表

import calendar
months = [month for month in calendar.month_name]
print(months)

输出

['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']

三 Calendar类

Calendar对象提供了一些可被用于准备日历数据格式化的方法。 这个类本身不执行任何格式化操作

3.1 iterweekdays()

获取一周的数字的迭代器

from calendar import Calendar

car = Calendar()
weeks = [  value for value in car.iterweekdays()]
print(weeks)

输出

[0, 1, 2, 3, 4, 5, 6]

3.2termonthdates()

termonthdates(year, month)获取一个月日期的迭代器

from calendar import Calendar

car = Calendar()
date = [date for date in car.itermonthdates(2020,5)]
print(date)

输出

[datetime.date(2020, 4, 27), datetime.date(2020, 4, 28), datetime.date(2020, 4, 29), datetime.date(2020, 4, 30), datetime.date(2020, 5, 1),..........]

3.3itermonthdays()

itermonthdays(year, month)返回一个月天数的迭代器

from calendar import Calendar

car = Calendar()
days = [day for day in car.itermonthdays(2020,5)]
print(days)

输出

[0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]

四 TextCalendar 类

TextCalendar 对象提供了一些生成纯文本日历的方法;

4.1 formatmonth()

formatmonth(theyear, themonth, w=0, l=0) 返回一个月的日历 ; 其中 prmonth(theyear, themonth, w=0, l=0) 打印结果 与formatmonth 一样,之间打印,不用写打印函数;

  • theyear指定年;
  • themonth指定月
  • w: 日期之间的宽度
  • l : 指定每行日期之间的行数
from calendar import TextCalendartextcar = TextCalendar()print(textcar.formatmonth(2020, 5))

输出

      May 2020Mo Tu We Th Fr Sa Su             1  2  3 4  5  6  7  8  9 1011 12 13 14 15 16 1718 19 20 21 22 23 24

4.2 formatyear()

formatyear(theyear, w=2, l=1, c=6, m=3) : 返回m 个列的日历;其中 pryear(theyear, w=2, l=1, c=6, m=3) 与其一样;

                                  2020      January                   February                   MarchMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su       1  2  3  4  5                      1  2                         1 6  7  8  9 10 11 12       3  4  5  6  7  8  9       2  3  4  5  6  7  813 14 15 16 17 18 19      10 11 12 13 14 15 16       9 10 11 12 13 14 1520 21 22 23 24 25 26      17 18 19 20 21 22 23      16 17 18 19 20 21 2227 28 29 30 31            24 25 26 27 28 29         23 24 25 26 27 28 29                                                    30 31       April                      May                       JuneMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su       1  2  3  4  5                   1  2  3       1  2  3  4  5  6  7 6  7  8  9 10 11 12       4  5  6  7  8  9 10       8  9 10 11 12 13 1413 14 15 16 17 18 19      11 12 13 14 15 16 17      15 16 17 18 19 20 2120 21 22 23 24 25 26      18 19 20 21 22 23 24      22 23 24 25 26 27 2827 28 29 30               25 26 27 28 29 30 31      29 30        July                     August                  SeptemberMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su       1  2  3  4  5                      1  2          1  2  3  4  5  6 6  7  8  9 10 11 12       3  4  5  6  7  8  9       7  8  9 10 11 12 1313 14 15 16 17 18 19      10 11 12 13 14 15 16      14 15 16 17 18 19 2020 21 22 23 24 25 26      17 18 19 20 21 22 23      21 22 23 24 25 26 2727 28 29 30 31            24 25 26 27 28 29 30      28 29 30                          31      October                   November                  DecemberMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su          1  2  3  4                         1          1  2  3  4  5  6 5  6  7  8  9 10 11       2  3  4  5  6  7  8       7  8  9 10 11 12 1312 13 14 15 16 17 18       9 10 11 12 13 14 15      14 15 16 17 18 19 2019 20 21 22 23 24 25      16 17 18 19 20 21 22      21 22 23 24 25 26 2726 27 28 29 30 31         23 24 25 26 27 28 29      28 29 30 31                          30

五 HTMLCalendar 类

calendar.HTMLCalendar(firstweekday=0)

可以使用HTMLCalendar 类生成 HTML 日历;其方法与之前的TextCalendar 大多类似,简单示例如下

from calendar import HTMLCalendarhtmlCar = HTMLCalendar()print(htmlCar.formatmonth(2020, 5, withyear=False))

输出

<table border="0" cellpadding="0" cellspacing="0" class="month"><tr><th colspan="7" class="month">May</th></tr><tr><th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th><th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th><th class="sun">Sun</th></tr><tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="fri">1</td><td class="sat">2</td><td class="sun">3</td></tr><tr><td class="mon">4</td><td class="tue">5</td><td class="wed">6</td><td class="thu">7</td><td class="fri">8</td><td class="sat">9</td><td class="sun">10</td></tr><tr><td class="mon">11</td><td class="tue">12</td><td class="wed">13</td><td class="thu">14</td><td class="fri">15</td><td class="sat">16</td><td class="sun">17</td></tr><tr><td class="mon">18</td><td class="tue">19</td><td class="wed">20</td><td class="thu">21</td><td class="fri">22</td><td class="sat">23</td><td class="sun">24</td></tr><tr><td class="mon">25</td><td class="tue">26</td><td class="wed">27</td><td class="thu">28</td><td class="fri">29</td><td class="sat">30</td><td class="sun">31</td></tr></table>

六官方文档

https://docs.python.org/3/library/calendar.html

相关文章