Python-标准库calendar的使用

本文介绍了Python的calendar模块,包括模块方法如设置一周第一天、判断闰年等,以及Calendar类的使用,如itermonthdates、monthdatescalendar等,详细解析了如何生成和打印不同格式的日历。
摘要由CSDN通过智能技术生成

此模块允许你输出类似Unix cal程序的日历,并提供与日历相关的其他有用功能。值得注意的是,默认情况下,这些日历将星期一作为一周的第一天,将星期日作为一周的最后一天(欧洲惯例)。不过,我们可以使用setfirstweekday()方法来设置一周的第一天为星期日或h者其他工作日,指定的日期以整数形式给出。

calendar模块主要由Calendar类与一些模块方法构成,Calendar类又衍生了一些子孙类来帮助我们实现一些特殊的功能

Calendar

模块方法

  • setfirstweekday(firstweekday):指定一周的第一天,0是星期一,…,6为星期日
import calendar

# 将星期日设置为一周第一天
calendar.setfirstweekday(firstweekday=6)
  • firstweekday():返回一周的第一天,0是星期一,…,6为星期日
import calendar

# 将星期日设置为一周第一天
calendar.setfirstweekday(firstweekday=6)
print(calendar.firstweekday())      # 6
  • isleap(year):判断指定是否是闰年,闰年为True,平年为False
import calendar

# 2018年是平年,所以为False
print(calendar.isleap(2018))        # False
# 2008年是如年,所以为True
print(calendar.isleap(2008))        # True
  • leapdays(y1, y2):返回y1y2年份之间的闰年数量,y1y2皆为年份。包括起始年,不包括结束年:
import calendar

# 2008到2011之间只有2008年是闰年,所以数量为1
print(calendar.leapdays(2008, 2011))    # 1
  • weekday(year, month, day):获取指定日期为星期几
import calendar

# 2018-08-08正是星期三,千万别忘记2代表的是星期三
print(calendar.weekday(2018, 8, 8))     # 2
  • weekheader(n):返回包含星期的英文缩写,n表示英文缩写所占的宽度
import calendar

print(calendar.weekheader(4))

############### 打印结果如下 ###############
Mon  Tue  Wed  Thu  Fri  Sat  Sun 
  • monthrange(year, month):返回一个由一个月第一个天的星期与当前月的天数组成的元组
import calendar

# 查看日历可以知道,08-01正是星期三,并且8月共31天
print(2018, 8)      # (2, 31)
  • monthcalendar(year, month):返回一个月中天数列表(不是当前月份的天数为0),按周划分,为一个二维数组。包括月份开始那周的所有日期和月份结束那周的所有日期
import calendar

calendar.setfirstweekday(firstweekday=6)
print(calendar.monthcalendar(2018, 8))

############### 打印结果如下 ###############
[[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, 0]]
  • prmonth(theyear, themonth, w=0, l=0):打印一个月的日历,theyear指定年份,themonth指定月份,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行
import calendar

calendar.setfirstweekday(firstweekday=6)
calendar.prmonth(2018, 8)

############### 打印结果如下 ###############
    August 2018
Su Mo Tu We Th Fr Sa
          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
  • month(theyear, themonth, w=0, l=0):返回一个月的日历的多行文本字符串。theyear指定年份,themonth指定月份,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行
import calendar

calendar.setfirstweekday(firstweekday=6)
print(calendar.month(2018, 8))

############### 打印结果如下 ###############
    August 2018
Su Mo Tu We Th Fr Sa
          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
  • prcal(year, w=0, l=0, c=6, m=3):打印一年的日历,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行,c表示月与月之间的间隔宽度,默认为6,内部已做处理,最小宽度为2,m表示将12个月分为m列
import calendar

calendar.setfirstweekday(firstweekday=6)
calendar.prcal(2018, m=4)

############### 打印结果如下 ###############
                                               2018

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值