> 文档中心 > 100天精通Python(基础篇)——第31天:三个时间相关标准库

100天精通Python(基础篇)——第31天:三个时间相关标准库

文章目录

  • 前言
  • 一、time模块介绍
    • 1、时间
    • 2、结构化时间对象
      • time.gmtime()
      • time.localtime()
    • 3、格式化时间的字符串
      • time.ctime()
      • time.asctime([t])
      • time.strftime()
    • 4、三种格式之间的转换
      • 时间戳 -> 结构化对象
      • 结构化对象 -> 时间戳
      • 结构化对象 -> 格式化时间字符串
      • 格式化时间字符串 -> 结构化对象
    • 5、计数函数
      • time.sleep(num)
      • time.perf_counter()
      • time.process_time()
  • 二、datetime模块介绍
    • 1、datetime.date类
    • 2、datetime.time类
    • 3、datetime.datetime类(最常用)
    • 4、datetime.timedalta类
  • 三、calendar模块介绍
    • 1、常用方法
    • 2、Calendar类
    • 3、TextCalendar 类
    • 4、HTMLCalendar类

前言

  • 作者介绍:Python领域优质创作者、数据开发工程师
  • 励志成为Python全栈工程师,关注我发现更多精彩~
  • 本文已收录于Python全栈系列专栏:100天精通Python从入门到就业
  • 欢迎订阅,订阅专栏后可私聊进百人Python全栈交流群(手把手教学,问题解答); 还可领取80GPython全栈教程 + 300本计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
  • 加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!

在这里插入图片描述
在这里插入图片描述

一、time模块介绍

time库是python处理时间数据的标准库

import time

time模块中三种时间表示方式

  • 时间戳(数字类型)

  • 结构化时间对象

  • 格式化时间字符串

1、时间戳

获取当前时间戳,计算内部时间值,浮点数

>>> import time>>> time.time()1647853836.377331

2、结构化时间对象

索引 属性
0 tm_year(年)
1 tm_mon(月)
2 tm_mday(日)
3 tm_hour(时)
4 tm_min(分)
5 tm_sec(秒)
6 tm_wday(周)
7 tm_yday(一年内第几天)
8 tm_isdst(夏时令)

time.gmtime()

将自纪元以来以秒表示的时间转换为struct_time标志始终为零的UTC。如果未提供secs或为None时,time()使用返回的当前时间。

>>> import time>>> type(time.gmtime())<class 'time.struct_time'>>>> time.gmtime()time.struct_time(tm_year=2022, tm_mon=3, tm_mday=21, tm_hour=9, tm_min=16, tm_sec=36, tm_wday=0, tm_yday=80, tm_isdst=0)

函数返回的值还可使用索引或者变量继续获取内部的变量

例如:time.gmtime().tm_year就可以获取到当前时间的年份,以此类推。

>>> import time>>> time.gmtime()[0]2022>>> time.gmtime().tm_year2022>>> time.gmtime()[1]3>>> time.gmtime().tm_mon3>>> time.gmtime()[2]21>>> time.gmtime().tm_mday21>>> print("今天是 {}-{}-{}".format(time.gmtime()[0], time.gmtime()[1], time.gmtime()[2]))今天是 2022-3-21>>> print("今天是 星期{}".format(time.gmtime().tm_wday + 1))今天是 星期2

time.localtime()

与gmtime()类似,但转换为当地时间。如果未提供 secs或为None时,time()使用返回的当前时间。

>>> import time>>> type(time.localtime())<class 'time.struct_time'>>>> time.localtime()time.struct_time(tm_year=2022, tm_mon=3, tm_mday=26, tm_hour=10, tm_min=44, tm_sec=53, tm_wday=5, tm_yday=85, tm_isdst=0)>>> print("今天是 {}-{}-{}".format(time.localtime()[0], time.gmtime()[1], time.gmtime()[2]))今天是 2022-3-26

3、格式化时间的字符串

time.ctime()

获取当前时间并以易读方式表示,返回字符串

>>> import time>>> time.ctime()'Mon Mar 21 17:14:36 2022'

time.asctime([t])

接受时间元组、通过函数 gmtime() 或 localtime()返回的时间值,返回一个可读的形式的字符串。如果未提供t,则使用返回的当前时间。

注意:asctime()不添加尾随换行符

>>> import time>>> time.asctime(time.localtime())'Sat Mar 26 10:28:02 2022'

time.strftime()

格式化日期,接收一个 struct_time 表示的时间,并返回以可读字符串表示的当地时间

格式化字符串 日期/时间说明 值范围和实例
%Y 年份 0000~9999,例如:2022
%m 月份 01~12,例如:3
%B 月份名称 January~December,例如:April
%b 月份名称缩写 Jan~Dec,例如:Apr
%d 日期 01~31,例如:20
%A 星期 Monday~Sunday,例如:Wednesday
%a 星期缩写 Mon~Sun,例如:Wed
%H 小时(24h制) 00~23,例如:12
%I 小时(12h制) 01~12,例如:7
%p 上\下午 AM\PM,例如:PM
%M 分钟 00~59,例如:10
%S 00~59,例如:20
%w 星期几(具体) 1~7,例如:7
%W 整年的第几周 1-52,例如:2
>>> import time>>> time.strftime('%Y-%m-%d %H:%M:%S')'2022-03-24 20:11:08'>>> time.strftime('%Y年%m月%d日 %H时:%M分:%S秒')'2022年03月24日 20时:12分:08秒'>>> time.strftime('%Y年%m月%d日 星期%w %H时:%M分:%S秒')'2022年03月24日 星期4 20时:18分:33秒'

4、三种格式之间的转换

图解
在这里插入图片描述

在这里插入图片描述

时间戳 -> 结构化对象

使用time.gmtime(时间戳)或者time.localtime(时间戳)

import time# 方法1 UTC时间print(time.gmtime())print(time.gmtime(time.time() - 3600))print("-" * 20)# 方法2(常用)print(time.localtime())print(time.localtime(time.time() - 3600))

输出结果
100天精通Python(基础篇)——第31天:三个时间相关标准库

结构化对象 -> 时间戳

使用time.mktime(结构化对象)

import timeprint(time.time())print(time.mktime(time.localtime())) # 精度到秒

输出结果:

1648125741.90423731648125741.0

结构化对象 -> 格式化时间字符串

使用time.strftime(格式化形式, time.localtime())或者time.strftime(格式化形式, time.gmtime())

import timeprint(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime()))print(time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime()))

输出结果:

2022-03-24 20:46:022022-03-24 12:46:02

格式化时间字符串 -> 结构化对象

使用strptime(str, format) 指定时间字符串

import timetime_str = '2020-07-25 13:23:58'print(time.strptime(time_str, '%Y-%m-%d %H:%M:%S'))

输出结果:

time.struct_time(tm_year=2020, tm_mon=7, tm_mday=25, tm_hour=13, tm_min=23, tm_sec=58, tm_wday=5, tm_yday=207, tm_isdst=-1)

5、计数函数

time.sleep(num)

使用sleep(s) 函数可以让该线程睡眠s秒,s秒之后自动唤醒。s是拟休眠的时间,单位是秒,可以是浮点数。

案例1

import timet1 = time.time()time.sleep(2)  # 让程序岁两秒t2 = time.time()print("执行了 {:.3f} 秒".format(t2 - t1))

输出结果:

执行了 2.004

案例2:爬虫小技巧与random搭配使用模拟人工点击

import timeimport randomsleep_time = random.uniform(1, 5)time.sleep(sleep_time)

time.perf_counter()

返回性能计数器的值(以小数秒为单位),即具有最高可用分辨率的时钟,以测量短持续时间。它包括睡眠期间经过的时间,并且是系统范围的。返回值的参考点未定义,因此只有连续调用结果之间的差才有效。

import timestart = time.perf_counter()time.sleep(1)end = time.perf_counter()print("耗时:", end - start)

输出结果:

耗时: 1.0125934

time.process_time()

返回当前进程的系统和用户CPU时间总和的值(以小数秒为单位)。它不包括睡眠期间经过的时间。返回值的参考点未定义,因此只有连续调用结果之间的差异才有效。

import timestart = time.process_time()time.sleep(1)end = time.process_time()print("耗时:", end - start)

输出结果:

耗时: 0.0

二、datetime模块介绍

datatime 模块重新封装了 time 模块,提供了更多接口,变得更加直观和易于调用。关注如何能够更有效地解析其属性用于格式化输出和数据操作

主要介绍四个标准类

  • datetime.date
  • datetime.time
  • datetime.datetime
  • datetime.timedelta

1、datetime.date类

date 类表示一个由年、月、日组成的日期,格式为:datetime.date(year, month, day)

类方法(属性)说明

方法(属性) 说明
today() 返回当地的当前日期
fromtimestamp(timestamp) 根据给定的时间戮,返回本地日期
min date 所能表示的最小日期
max date 所能表示的最大日期
resolution 时间间隔

案例如下:

>>> import time>>> import datetime# 查看类型>>> type(datetime.date.today())<class 'datetime.date'># today()生成>>> print(datetime.date.today())2022-03-26# 指定日期>>> print(datetime.date(2022, 5, 20))2022-05-20# 根据给定的时间戮,返回本地日期>>> print(datetime.date.fromtimestamp(time.time()))2022-03-26# 类属性>>> print(datetime.date.min)0001-01-01>>> print(datetime.date.max)9999-12-31>>> print(datetime.date.resolution)1 day, 0:00:00

实例方法(属性)说明

方法(属性) 说明
year
month
day
timetuple() 返回结构化时间对象 struct_time
replace() 替换(可以替换年、月、日)
weekday() 返回一个整数代表星期几( 0:星期一, 6:星期天)
isoweekday() 返回一个整数代表星期几( 1:星期一, 7:星期天)
isocalendar() 返回格式为 (year,month,day) 的元组
isoformat() 返回格式如 YYYY-MM-DD 格式化的时间字符串
strftime(format) 返回自定义格式的字符串

案例如下:

>>> import datetime# 实例属性>>> datetime.date.today().year2022>>> datetime.date.today().month3>>> datetime.date.today().day26>>> datetime.date.today().weekday()5>>> datetime.date.today().isoweekday()6>>> datetime.date.today().isocalendar()(2022, 12, 6)>>> datetime.date.today().isoformat()'2022-03-26'>>> datetime.date.today().strftime('%Y年%m月%d日 %H时:%M分:%S秒')'2022年03月26日 00时:00分:00秒'# 实例方法>>> datetime.date.today().timetuple()time.struct_time(tm_year=2022, tm_mon=3, tm_mday=26, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=85, tm_isdst=-1)# 替换日期>>> print(datetime.date.today().replace(2222))2222-03-26>>> print(datetime.date.today().replace(2022,1,30))2022-01-30>>> print(datetime.date.today().replace(day=29))2022-03-29

2、datetime.time类

time 类表示由时、分、秒、微秒组成的时间,格式为:time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)

类方法和实例属性如下

方法(属性) 说明
min time 所能表示的最小日期
max time 所能表示的最大日期
resolution 时间相加的最小单位
hour
minute
second
microsecond 微秒
isoformat() 返回格式如 YYYY-MM-DD 格式化的时间字符串
strftime(format) 返回自定义格式的字符串
replace() 创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性

案例如下:

>>> import datetime>>> t = datetime.time(15, 10, 45, 888888)# 类方法>>> print(t.min)00:00:00>>> print(t.max)23:59:59.999999>>> print(t.resolution)0:00:00.000001# 实例属性>>> t.hour15>>> t.minute10>>> t.second45>>> t.microsecond888888# 其他方法>>> print(t.isoformat())15:10:45.888888>>> print(t.strftime('%Y年%m月%d日 %H时:%M分:%S秒'))1900010115:10:45>>> print(t.replace(hour=8, minute=8))08:08:45.888888

3、datetime.datetime类(最常用)

datetime 包括了 date 与 time 的所有信息,格式为:datetime(year, month, day, hour=0,minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0),参数范围值参考date 类与 time 类。

类方法和属性如下所示

方法(属性) 说明
today() 返回当地的当前时间
now(tz=None) 类似于 today(),可选参数 tz 可指定时区
utcnow() 类似于 now(),返回当前 UTC 时间
fromtimestamp(时间戳) 根据时间戳返回对应时间
utcfromtimestamp(时间戳) 根据时间戳返回对应 UTC 时间
strptime(字符串,format) 跟着字符串(对应的格式)返回时间
combine(date, time) 根据 date 和 time 返回对应时间

案例如下:

>>> import datetime>>> print(datetime.datetime.today())2022-03-26 14:50:56.924335>>> print(datetime.datetime.now(tz=None))2022-03-26 14:51:22.981125>>> print(datetime.datetime.utcnow())2022-03-26 06:51:56.038939# 时间戳 -> dt>>> print(datetime.datetime.fromtimestamp(time.time()))2022-03-26 14:55:50.609014>>> print(datetime.datetime.utcfromtimestamp(time.time()))2022-03-26 06:57:36.143067# 字符串 -> dt>>> print(datetime.datetime.strptime('2022年03月26日 00时:00分:00秒', '%Y年%m月%d日 %H时:%M分:%S 秒'))2022-03-26 00:00:00# date+time -> datetime>>> print(datetime.datetime.combine(datetime.date(2222, 2, 2), datetime.time(2, 2, 2)))2222-02-02 02:02:02

实例方法说明

方法(属性) 说明
year
month
day
hour
minute
second
microsecond 微秒
replace() 生成一个新的日期对象,用参数指定的年,月,日,时,分,秒…代替原有对象中的属性
timestamp() datetime -> 时间戳
strftime(format) 返回自定义格式的字符串

案例如下:

>>> import datetime>>> dt = datetime.datetime(2022, 8, 20, 13, 22, 34, 88888)>>> print(dt, type(dt))2022-08-20 13:22:34.088888 <class 'datetime.datetime'># 属性>>> dt.year2022>>> dt.month8>>> dt.day20>>> dt.hour13>>> dt.minute22>>> dt.second34>>> dt.microsecond88888>>> print(dt.replace(second=57, day=20))2022-08-20 13:22:57.088888# datetime -> 时间戳>>> print(dt.timestamp())1660972954.088888# datetime -> 格式化字符串>>> print(dt.strftime('%Y年%m月%d日 %H时:%M分:%S 秒'))2022082013:22:34

图解:datetime.datetime类对时间戳与时间字符串进行转换
在这里插入图片描述在这里插入图片描述

4、datetime.timedalta类

计算时间差的类,格式:class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)

案例如下:

>>> import time>>> import datetime# 生成时间差>>> td = datetime.timedelta(days=10)>>> print(td, type(td))10 days, 0:00:00 <class 'datetime.timedelta'>>>> td = datetime.timedelta(days=10,hours=5)>>> print(td)10 days, 5:00:00>>> td = datetime.timedelta(days=10,hours=-5)>>> print(td)9 days, 19:00:00# 计算目标日期>>> dt = datetime.datetime.today()>>> print("现在是 {}".format(dt.strftime('%Y年%m月%d日 %H时:%M分:%S秒')))现在是 2022032615:47:13>>> delta = datetime.timedelta(days=10)>>> target = dt + delta>>> print("十天后是 {}".format(target.strftime('%Y年%m月%d日 %H时:%M分:%S秒')))十天后是 2022040515:47:13>>> dt = datetime.datetime.today()>>> print("现在是 {}".format(dt.strftime('%Y年%m月%d日 %H时:%M分:%S秒')))现在是 2022032615:47:13>>> delta = datetime.timedelta(hours=-5)>>> target = dt + delta>>> print("五小时之前是 {}".format(target.strftime('%Y年%m月%d日 %H时:%M分:%S秒')))五小时之前是 2022032610:47:13# 计算时间差>>> dt1 = datetime.datetime.today()>>> dt2 = datetime.datetime.utcnow()>>> td = dt1 - dt2>>> print("我们与UTC时间差是:{}小时".format(td.seconds/3600))我们与UTC时间差是:7.994166666666667小时>>> print("我们与UTC时间差是:{:.0f}小时".format(td.seconds/3600))我们与UTC时间差是:8小时

三、calendar模块介绍

此模块允许你输出类似Unix cal程序的日历,并提供与日历相关的其他有用功能。值得注意的是,默认情况下,这些日历将星期一作为一周的第一天,将星期日作为一周的最后一天(欧洲惯例)

1、常用方法

  • month(year, month, w=0, l=0):返回一个月的日历的多行文本字符串。year指定年份,month指定月份,w每个单元格宽度,l每列换l行

    import calendarprint(calendar.month(2022, 3))输出结果:     March 2022Mo Tu We Th Fr Sa Su    1  2  3  4  5  6 7  8  9 10 11 12 1314 15 16 17 18 19 2021 22 23 24 25 26 2728 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 calendarcalendar.prcal(2022)输出结果:      2022      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   1  2  3  4  5  6   1  2  3  4  5  6 3  4  5  6  7  8  97  8  9 10 11 12 137  8  9 10 11 12 1310 11 12 13 14 15 16      14 15 16 17 18 19 20      14 15 16 17 18 19 2017 18 19 20 21 22 23      21 22 23 24 25 26 27      21 22 23 24 25 26 2724 25 26 27 28 29 30      28   28 29 30 3131April 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    1      1  2  3  4  5 4  5  6  7  8  9 102  3  4  5  6  7  86  7  8  9 10 11 1211 12 13 14 15 16 179 10 11 12 13 14 15      13 14 15 16 17 18 1918 19 20 21 22 23 24      16 17 18 19 20 21 22      20 21 22 23 24 25 2625 26 27 28 29 30  23 24 25 26 27 28 29      27 28 29 30     30 31 JulyAugust    SeptemberMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      1  2  31  2  3  4  5  6  7  1  2  3  4 4  5  6  7  8  9 108  9 10 11 12 13 145  6  7  8  9 10 1111 12 13 14 15 16 17      15 16 17 18 19 20 21      12 13 14 15 16 17 1818 19 20 21 22 23 24      22 23 24 25 26 27 28      19 20 21 22 23 24 2525 26 27 28 29 30 31      29 30 31    26 27 28 29 30      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   1  2  3  4  5  6  1  2  3  4 3  4  5  6  7  8  97  8  9 10 11 12 135  6  7  8  9 10 1110 11 12 13 14 15 16      14 15 16 17 18 19 20      12 13 14 15 16 17 1817 18 19 20 21 22 23      21 22 23 24 25 26 27      19 20 21 22 23 24 2524 25 26 27 28 29 30      28 29 30    26 27 28 29 30 3131
  • calendar(year, w=2, l=1, c=6, m=3):以多行字符串形式返回一年的日历。w每个单元格宽度,l每列换l行,c表示月与月之间的间隔宽度,m表示将12个月分为m列

    import calendarprint(calendar.calendar(2022))输出结果:      2022      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   1  2  3  4  5  6   1  2  3  4  5  6 3  4  5  6  7  8  97  8  9 10 11 12 137  8  9 10 11 12 1310 11 12 13 14 15 16      14 15 16 17 18 19 20      14 15 16 17 18 19 2017 18 19 20 21 22 23      21 22 23 24 25 26 27      21 22 23 24 25 26 2724 25 26 27 28 29 30      28   28 29 30 3131April 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    1      1  2  3  4  5 4  5  6  7  8  9 102  3  4  5  6  7  86  7  8  9 10 11 1211 12 13 14 15 16 179 10 11 12 13 14 15      13 14 15 16 17 18 1918 19 20 21 22 23 24      16 17 18 19 20 21 22      20 21 22 23 24 25 2625 26 27 28 29 30  23 24 25 26 27 28 29      27 28 29 30     30 31 JulyAugust    SeptemberMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      1  2  31  2  3  4  5  6  7  1  2  3  4 4  5  6  7  8  9 108  9 10 11 12 13 145  6  7  8  9 10 1111 12 13 14 15 16 17      15 16 17 18 19 20 21      12 13 14 15 16 17 1818 19 20 21 22 23 24      22 23 24 25 26 27 28      19 20 21 22 23 24 2525 26 27 28 29 30 31      29 30 31    26 27 28 29 30      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   1  2  3  4  5  6  1  2  3  4 3  4  5  6  7  8  97  8  9 10 11 12 135  6  7  8  9 10 1110 11 12 13 14 15 16      14 15 16 17 18 19 20      12 13 14 15 16 17 1817 18 19 20 21 22 23      21 22 23 24 25 26 27      19 20 21 22 23 24 2524 25 26 27 28 29 30      28 29 30    26 27 28 29 30 3131
  • setfirstweekday(weekday):设置每一周的开始(0 表示星期一,6 表示星期天)

    import calendar# 设置星期2为每周第一天calendar.setfirstweekday(firstweekday=1)
  • firstweekday():返回当前设置的每星期的第一天的数值

    import calendar# 设置星期2为每周第一天calendar.setfirstweekday(firstweekday=1)print(calendar.firstweekday()) 输出结果:1
  • isleap(year):判断指定是否是闰年,闰年为True,平年为False

    import calendarprint(calendar.isleap(2020))print(calendar.isleap(2021))输出结果:TrueFalse
  • leapdays(y1, y2):返回y1与y2年份之间的闰年数量,y1与y2皆为年份。包括起始年,不包括结束年

    import calendarprint(calendar.leapdays(2000, 2022))# 闰年有2000、2004、2008、2012、2016、2020输出结果:6
  • weekday(year, month, day):获取指定日期为星期几

    import calendarprint(calendar.weekday(2022, 3, 26))输出结果:5 # 代表星期六
  • weekheader(n):返回包含星期的英文缩写,n表示英文缩写所占的宽度

    import calendarprint(calendar.weekheader(2))输出结果:Mo Tu We Th Fr Sa Su
  • monthrange(year, month):返回一个由一个月第一个天的星期与当前月的天数组成的元组

    import calendarprint(calendar.monthrange(2022, 3))输出结果:(1, 31)
  • monthcalendar(year, month):返回一个月中天数列表(不是当前月份的天数为0),按周划分,为一个二维数组。包括月份开始那周的所有日期和月份结束那周的所有日期

    import calendarprint(calendar.month(2022, 3))print(calendar.monthcalendar(2022, 3))输出结果:可以看出0与日历表每行空白处相对应     March 2022Mo Tu We Th Fr Sa Su    1  2  3  4  5  6 7  8  9 10 11 12 1314 15 16 17 18 19 2021 22 23 24 25 26 2728 29 30 31[[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, 0, 0]]

2、Calendar类

Calendar 对象提供了一些日历数据格式化的方法

  • iterweekdays():获取一周的数字的迭代器,迭代器的第一个值与firstweekday的值相同

    from calendar import Calendarc = Calendar()print(list(c.iterweekdays()))c = Calendar(firstweekday=6)print(list(c.iterweekdays()))输出结果:[0, 1, 2, 3, 4, 5, 6]代表星期一至星期日,0为星期一,即一周的第一天[6, 0, 1, 2, 3, 4, 5]代表星期日至星期六,6为星期日,即一周的第一天
  • itermonthdates(year, month):获取一个月日期的迭代器,此迭代器会返回指定月份的所有日期,包括月份开始那周的所有日期和月份结束那周的所有日期

    from calendar import Calendarc = Calendar(firstweekday=6)for item in c.itermonthdates(2022, 3):    print(item)输出结果:2022-03-282022-03-29........2022-04-302022-05-01

3、TextCalendar 类

Calendar子类,firstweekday为一个整数,指定一周的第一天,0是星期一(默认),6为星期日,用来生成纯文本日历。

  • formatmonth(year, month, w=0, l=0):以多行字符串形式返回一个月的日历。year指定年,month指定月,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行

    from calendar import TextCalendarc = TextCalendar()print(c.formatmonth(2022, 3))输出结果:     March 2022Mo Tu We Th Fr Sa Su    1  2  3  4  5  6 7  8  9 10 11 12 1314 15 16 17 18 19 2021 22 23 24 25 26 2728 29 30 31
  • prmonth(theyear, themonth, w=0, l=0):打印formatmonth(theyear, themonth, w=0, l=0)的结果,无返回值

    from calendar import TextCalendarc = TextCalendar(firstweekday=6)c.prmonth(2022, 3)输出结果:     March 2022Su Mo Tu We Th Fr Sa1  2  3  4  5 6  7  8  9 10 11 1213 14 15 16 17 18 1920 21 22 23 24 25 2627 28 29 30 31
  • formatyear(theyear, w=2, l=1, c=6, m=3):以多行字符串形式返回一年的日历,w每个单元格宽度,l每列换l行,c月与月之间的间隔宽度,m表示将12个月分为m列

    from calendar import TextCalendarc = TextCalendar()print(c.formatyear(2022))输出结果:      2022      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   1  2  3  4  5  6   1  2  3  4  5  6 3  4  5  6  7  8  97  8  9 10 11 12 137  8  9 10 11 12 1310 11 12 13 14 15 16      14 15 16 17 18 19 20      14 15 16 17 18 19 2017 18 19 20 21 22 23      21 22 23 24 25 26 27      21 22 23 24 25 26 2724 25 26 27 28 29 30      28   28 29 30 3131April 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    1      1  2  3  4  5 4  5  6  7  8  9 102  3  4  5  6  7  86  7  8  9 10 11 1211 12 13 14 15 16 179 10 11 12 13 14 15      13 14 15 16 17 18 1918 19 20 21 22 23 24      16 17 18 19 20 21 22      20 21 22 23 24 25 2625 26 27 28 29 30  23 24 25 26 27 28 29      27 28 29 30     30 31 JulyAugust    SeptemberMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      1  2  31  2  3  4  5  6  7  1  2  3  4 4  5  6  7  8  9 108  9 10 11 12 13 145  6  7  8  9 10 1111 12 13 14 15 16 17      15 16 17 18 19 20 21      12 13 14 15 16 17 1818 19 20 21 22 23 24      22 23 24 25 26 27 28      19 20 21 22 23 24 2525 26 27 28 29 30 31      29 30 31    26 27 28 29 30      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   1  2  3  4  5  6  1  2  3  4 3  4  5  6  7  8  97  8  9 10 11 12 135  6  7  8  9 10 1110 11 12 13 14 15 16      14 15 16 17 18 19 20      12 13 14 15 16 17 1817 18 19 20 21 22 23      21 22 23 24 25 26 27      19 20 21 22 23 24 2524 25 26 27 28 29 30      28 29 30    26 27 28 29 30 3131

4、HTMLCalendar类

Calendar的子类,firstweekday为一个整数,指定一周的第一天,0是星期一(默认),6为星期日

  • formatmonth(theyear, themonth, withyear=Ture):返回一个月日历的html内容,withyear是否显示年份,默认为True,即显示年份

    from calendar import HTMLCalendarc = HTMLCalendar()print(c.formatmonth(2022, 3, withyear=False))输出结果:<table border="0" cellpadding="0" cellspacing="0" class="month"><tr><th colspan="7" class="month">March</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="tue">1</td><td class="wed">2</td><td class="thu">3</td><td class="fri">4</td><td class="sat">5</td><td class="sun">6</td></tr><tr><td class="mon">7</td><td class="tue">8</td><td class="wed">9</td><td class="thu">10</td><td class="fri">11</td><td class="sat">12</td><td class="sun">13</td></tr><tr><td class="mon">14</td><td class="tue">15</td><td class="wed">16</td><td class="thu">17</td><td class="fri">18</td><td class="sat">19</td><td class="sun">20</td></tr><tr><td class="mon">21</td><td class="tue">22</td><td class="wed">23</td><td class="thu">24</td><td class="fri">25</td><td class="sat">26</td><td class="sun">27</td></tr><tr><td class="mon">28</td><td class="tue">29</td><td class="wed">30</td><td class="thu">31</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td></tr></table>
  • formatyear(theyear, width=3):返回一年日历的html内容,width表示将12个月分为width列

    from calendar import HTMLCalendarc = HTMLCalendar()print(c.formatyear(2022, width=3))
  • formatyearpage(theyear, width=3, css=’calendar.css’, encoding=None):返回一年日历的html内容,width表示将12个月分为width列,css可自定义css样式,encoding编码方式

    from calendar import HTMLCalendarc = HTMLCalendar()print(c.formatyearpage(2022, width=4))