python|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、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
  • 加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!
python|100天精通Python(基础篇)——第31天(三个时间相关标准库)
文章图片

python|100天精通Python(基础篇)——第31天(三个时间相关标准库)
文章图片

一、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()) >>> 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_year 2022 >>> time.gmtime()[1] 3 >>> time.gmtime().tm_mon 3 >>> time.gmtime()[2] 21 >>> time.gmtime().tm_mday 21 >>> 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()) >>> 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、三种格式之间的转换 图解:
python|100天精通Python(基础篇)——第31天(三个时间相关标准库)
文章图片

python|100天精通Python(基础篇)——第31天(三个时间相关标准库)
文章图片

时间戳 -> 结构化对象
使用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))

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

结构化对象 -> 时间戳
使用time.mktime(结构化对象)
import timeprint(time.time()) print(time.mktime(time.localtime())) # 精度到秒

输出结果:
1648125741.9042373 1648125741.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:02 2022-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 time import 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)

【python|100天精通Python(基础篇)——第31天(三个时间相关标准库)】输出结果:
耗时: 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()) # 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().year 2022 >>> datetime.date.today().month 3 >>> datetime.date.today().day 26 >>> 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.hour 15 >>> t.minute 10 >>> t.second 45 >>> t.microsecond 888888# 其他方法 >>> print(t.isoformat()) 15:10:45.888888 >>> print(t.strftime('%Y年%m月%d日 %H时:%M分:%S秒')) 1900年01月01日 15时: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 # 属性 >>> dt.year 2022 >>> dt.month 8 >>> dt.day 20 >>> dt.hour 13 >>> dt.minute 22 >>> dt.second 34 >>> dt.microsecond 88888 >>> 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 秒')) 2022年08月20日 13时:22分:34 秒

图解:datetime.datetime类对时间戳与时间字符串进行转换
python|100天精通Python(基础篇)——第31天(三个时间相关标准库)
文章图片
python|100天精通Python(基础篇)——第31天(三个时间相关标准库)
文章图片

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 >>> 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秒'))) 现在是 2022年03月26日 15时:47分:13秒 >>> delta = datetime.timedelta(days=10) >>> target = dt + delta >>> print("十天后是 {}".format(target.strftime('%Y年%m月%d日 %H时:%M分:%S秒'))) 十天后是 2022年04月05日 15时:47分:13秒>>> dt = datetime.datetime.today() >>> print("现在是 {}".format(dt.strftime('%Y年%m月%d日 %H时:%M分:%S秒'))) 现在是 2022年03月26日 15时:47分:13秒 >>> delta = datetime.timedelta(hours=-5) >>> target = dt + delta >>> print("五小时之前是 {}".format(target.strftime('%Y年%m月%d日 %H时:%M分:%S秒'))) 五小时之前是 2022年03月26日 10时: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 2022 Mo Tu We Th Fr Sa Su 123456 789 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 calendarcalendar.prcal(2022)输出结果: 2022JanuaryFebruaryMarch Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 12123456123456 3456789789 10 11 12 13789 10 11 12 13 10 11 12 13 14 15 1614 15 16 17 18 19 2014 15 16 17 18 19 20 17 18 19 20 21 22 2321 22 23 24 25 26 2721 22 23 24 25 26 27 24 25 26 27 28 29 302828 29 30 31 31AprilMayJune Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 123112345 456789 1023456786789 10 11 12 11 12 13 14 15 16 179 10 11 12 13 14 1513 14 15 16 17 18 19 18 19 20 21 22 23 2416 17 18 19 20 21 2220 21 22 23 24 25 26 25 26 27 28 29 3023 24 25 26 27 28 2927 28 29 30 30 31JulyAugustSeptember Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 12312345671234 456789 1089 10 11 12 13 1456789 10 11 11 12 13 14 15 16 1715 16 17 18 19 20 2112 13 14 15 16 17 18 18 19 20 21 22 23 2422 23 24 25 26 27 2819 20 21 22 23 24 25 25 26 27 28 29 30 3129 30 3126 27 28 29 30OctoberNovemberDecember Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 121234561234 3456789789 10 11 12 1356789 10 11 10 11 12 13 14 15 1614 15 16 17 18 19 2012 13 14 15 16 17 18 17 18 19 20 21 22 2321 22 23 24 25 26 2719 20 21 22 23 24 25 24 25 26 27 28 29 3028 29 3026 27 28 29 30 31 31

  • calendar(year, w=2, l=1, c=6, m=3):以多行字符串形式返回一年的日历。w每个单元格宽度,l每列换l行,c表示月与月之间的间隔宽度,m表示将12个月分为m列
    import calendarprint(calendar.calendar(2022))输出结果: 2022JanuaryFebruaryMarch Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 12123456123456 3456789789 10 11 12 13789 10 11 12 13 10 11 12 13 14 15 1614 15 16 17 18 19 2014 15 16 17 18 19 20 17 18 19 20 21 22 2321 22 23 24 25 26 2721 22 23 24 25 26 27 24 25 26 27 28 29 302828 29 30 31 31AprilMayJune Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 123112345 456789 1023456786789 10 11 12 11 12 13 14 15 16 179 10 11 12 13 14 1513 14 15 16 17 18 19 18 19 20 21 22 23 2416 17 18 19 20 21 2220 21 22 23 24 25 26 25 26 27 28 29 3023 24 25 26 27 28 2927 28 29 30 30 31JulyAugustSeptember Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 12312345671234 456789 1089 10 11 12 13 1456789 10 11 11 12 13 14 15 16 1715 16 17 18 19 20 2112 13 14 15 16 17 18 18 19 20 21 22 23 2422 23 24 25 26 27 2819 20 21 22 23 24 25 25 26 27 28 29 30 3129 30 3126 27 28 29 30OctoberNovemberDecember Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 121234561234 3456789789 10 11 12 1356789 10 11 10 11 12 13 14 15 1614 15 16 17 18 19 2012 13 14 15 16 17 18 17 18 19 20 21 22 2321 22 23 24 25 26 2719 20 21 22 23 24 25 24 25 26 27 28 29 3028 29 3026 27 28 29 30 31 31

  • 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))输出结果: True False

  • 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 2022 Mo Tu We Th Fr Sa Su 123456 789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 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-28 2022-03-29 ........ 2022-04-30 2022-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 2022 Mo Tu We Th Fr Sa Su 123456 789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 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 2022 Su Mo Tu We Th Fr Sa 12345 6789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 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))输出结果: 2022JanuaryFebruaryMarch Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 12123456123456 3456789789 10 11 12 13789 10 11 12 13 10 11 12 13 14 15 1614 15 16 17 18 19 2014 15 16 17 18 19 20 17 18 19 20 21 22 2321 22 23 24 25 26 2721 22 23 24 25 26 27 24 25 26 27 28 29 302828 29 30 31 31AprilMayJune Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 123112345 456789 1023456786789 10 11 12 11 12 13 14 15 16 179 10 11 12 13 14 1513 14 15 16 17 18 19 18 19 20 21 22 23 2416 17 18 19 20 21 2220 21 22 23 24 25 26 25 26 27 28 29 3023 24 25 26 27 28 2927 28 29 30 30 31JulyAugustSeptember Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 12312345671234 456789 1089 10 11 12 13 1456789 10 11 11 12 13 14 15 16 1715 16 17 18 19 20 2112 13 14 15 16 17 18 18 19 20 21 22 23 2422 23 24 25 26 27 2819 20 21 22 23 24 25 25 26 27 28 29 30 3129 30 3126 27 28 29 30OctoberNovemberDecember Mo Tu We Th Fr Sa SuMo Tu We Th Fr Sa SuMo Tu We Th Fr Sa Su 121234561234 3456789789 10 11 12 1356789 10 11 10 11 12 13 14 15 1614 15 16 17 18 19 2012 13 14 15 16 17 18 17 18 19 20 21 22 2321 22 23 24 25 26 2719 20 21 22 23 24 25 24 25 26 27 28 29 3028 29 3026 27 28 29 30 31 31

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))输出结果:
    March
    MonTueWedThuFriSatSun
      123456
    78910111213
    14151617181920
    21222324252627
    28293031     

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

    推荐阅读