zoukankan      html  css  js  c++  java
  • python专题calendar模块

    一 前言

    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 TextCalendar
    
    textcar = TextCalendar()
    print(textcar.formatmonth(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
    

    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                   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
    
    

    五 HTMLCalendar 类

    calendar.HTMLCalendar(firstweekday=0)

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

    from calendar import HTMLCalendar
    htmlCar = 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

  • 相关阅读:
    [灵魂拷问]MySQL面试高频100问(工程师方向)
    前后端分离模式下的权限设计方案
    Netty实战:设计一个IM框架
    超实用,Linux中查看文本的小技巧
    Java面试,如何在短时间内做突击
    挑战10个最难回答的Java面试题(附答案)
    SpringBoot是如何动起来的
    Lab_2_SysOps_VPC_Linux_v2.5
    Lab_1_SysOps_Compute_Linux_v2.5
    change-resource-tags.sh
  • 原文地址:https://www.cnblogs.com/zszxz/p/12921303.html
Copyright © 2011-2022 走看看