- 作者介绍:Python领域优质创作者、数据开发工程师
- 励志成为Python全栈工程师,关注我发现更多精彩~
- 本文已收录于Python全栈系列专栏:100天精通Python从入门到就业
- 欢迎订阅,订阅专栏后可私聊进百人Python全栈交流群(手把手教学,问题解答); 还可领取80GPython全栈教程 + 300本计算机书籍:基础、Web、爬虫、数据分析、可视化、机器学习、深度学习、人工智能、算法、面试题等。
- 加入我一起学习进步,一个人可以走的很快,一群人才能走的更远!
time库是python处理时间数据的标准库
import time
time模块中三种时间表示方式:
时间戳(数字类型)
结构化时间对象
格式化时间字符串
获取当前时间戳,计算内部时间值,浮点数
>>> import time
>>> time.time()
1647853836.377331
索引 | 属性 |
---|---|
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(夏时令) |
将自纪元以来以秒表示的时间转换为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_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
与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
获取当前时间并以易读方式表示,返回字符串
>>> import time
>>> time.ctime()
'Mon Mar 21 17:14:36 2022'
接受时间元组、通过函数 gmtime() 或 localtime()返回的时间值,返回一个可读的形式的字符串。如果未提供t,则使用返回的当前时间。
注意
:asctime()不添加尾随换行符
>>> import time
>>> time.asctime(time.localtime())
'Sat Mar 26 10:28:02 2022'
格式化日期,接收一个 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秒'
使用
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))
使用
time.mktime(结构化对象)
import time
print(time.time())
print(time.mktime(time.localtime())) # 精度到秒
输出结果:
1648125741.9042373
1648125741.0
使用
time.strftime(格式化形式, time.localtime())
或者time.strftime(格式化形式, time.gmtime())
import time
print(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 time
time_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)
使用sleep(s) 函数可以让该线程睡眠s秒,s秒之后自动唤醒。s是拟休眠的时间,单位是秒,可以是浮点数。
案例1:
import time
t1 = time.time()
time.sleep(2) # 让程序岁两秒
t2 = time.time()
print("执行了 {:.3f} 秒".format(t2 - t1))
输出结果:
执行了 2.004 秒
案例2:爬虫小技巧与random
搭配使用模拟人工点击
import time
import random
sleep_time = random.uniform(1, 5)
time.sleep(sleep_time)
返回性能计数器的值(以小数秒为单位),即具有最高可用分辨率的时钟,以测量短持续时间。它包括睡眠期间经过的时间,并且是系统范围的。返回值的参考点未定义,因此只有连续调用结果之间的差才有效。
import time
start = time.perf_counter()
time.sleep(1)
end = time.perf_counter()
print("耗时:", end - start)
输出结果:
耗时: 1.0125934
返回当前进程的系统和用户CPU时间总和的值(以小数秒为单位)。它不包括睡眠期间经过的时间。返回值的参考点未定义,因此只有连续调用结果之间的差异才有效。
import time
start = time.process_time()
time.sleep(1)
end = time.process_time()
print("耗时:", end - start)
输出结果:
耗时: 0.0
datatime
模块重新封装了time
模块,提供了更多接口,变得更加直观和易于调用。关注如何能够更有效地解析其属性用于格式化输出和数据操作
主要介绍四个标准类:
datetime.date
datetime.time
datetime.datetime
datetime.timedelta
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().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
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
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.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类对时间戳与时间字符串进行转换
计算时间差的类,格式:
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秒')))
现在是 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小时
此模块允许你输出类似Unix cal程序的日历,并提供与日历相关的其他有用功能。值得注意的是,默认情况下,这些日历将星期一作为一周的第一天,将星期日作为一周的最后一天(欧洲惯例)
month(year, month, w=0, l=0)
:返回一个月的日历的多行文本字符串。year
指定年份,month
指定月份,w
每个单元格宽度,l
每列换l行
import calendar
print(calendar.month(2022, 3))
输出结果:
March 2022
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
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.prcal(2022)
输出结果:
2022
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 1 2 3 4 5 6 1 2 3 4 5 6
3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28 28 29 30 31
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 1 1 2 3 4 5
4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12
11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19
18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26
25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30
30 31
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 1 2 3 4 5 6 7 1 2 3 4
4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11
11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18
18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25
25 26 27 28 29 30 31 29 30 31 26 27 28 29 30
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 1 2 3 4 5 6 1 2 3 4
3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11
10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18
17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25
24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31
31
calendar(year, w=2, l=1, c=6, m=3)
:以多行字符串形式返回一年的日历。w
每个单元格宽度,l
每列换l行,c
表示月与月之间的间隔宽度,m
表示将12个月分为m列
import calendar
print(calendar.calendar(2022))
输出结果:
2022
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 1 2 3 4 5 6 1 2 3 4 5 6
3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28 28 29 30 31
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 1 1 2 3 4 5
4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12
11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19
18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26
25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30
30 31
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 1 2 3 4 5 6 7 1 2 3 4
4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11
11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18
18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25
25 26 27 28 29 30 31 29 30 31 26 27 28 29 30
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 1 2 3 4 5 6 1 2 3 4
3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11
10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18
17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25
24 25 26 27 28 29 30 28 29 30 26 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 calendar
print(calendar.isleap(2020))
print(calendar.isleap(2021))
输出结果:
True
False
leapdays(y1, y2)
:返回y1与y2年份之间的闰年数量,y1与y2皆为年份。包括起始年,不包括结束年
import calendar
print(calendar.leapdays(2000, 2022))
# 闰年有2000、2004、2008、2012、2016、2020
输出结果:
6
weekday(year, month, day)
:获取指定日期为星期几
import calendar
print(calendar.weekday(2022, 3, 26))
输出结果:
5 # 代表星期六
weekheader(n)
:返回包含星期的英文缩写,n表示英文缩写所占的宽度
import calendar
print(calendar.weekheader(2))
输出结果:
Mo Tu We Th Fr Sa Su
monthrange(year, month)
:返回一个由一个月第一个天的星期与当前月的天数组成的元组
import calendar
print(calendar.monthrange(2022, 3))
输出结果:
(1, 31)
monthcalendar(year, month)
:返回一个月中天数列表(不是当前月份的天数为0),按周划分,为一个二维数组。包括月份开始那周的所有日期和月份结束那周的所有日期
import calendar
print(calendar.month(2022, 3))
print(calendar.monthcalendar(2022, 3))
输出结果:可以看出0与日历表每行空白处相对应
March 2022
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
[[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]]
Calendar 对象提供了一些日历数据格式化的方法
iterweekdays()
:获取一周的数字的迭代器,迭代器的第一个值与firstweekday的值相同
from calendar import Calendar
c = 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 Calendar
c = Calendar(firstweekday=6)
for item in c.itermonthdates(2022, 3):
print(item)
输出结果:
2022-03-28
2022-03-29
........
2022-04-30
2022-05-01
Calendar子类,firstweekday为一个整数,指定一周的第一天,0是星期一(默认),6为星期日,用来生成纯文本日历。
formatmonth(year, month, w=0, l=0)
:以多行字符串形式返回一个月的日历。year指定年,month指定月,w每个单元格宽度,默认0,内部已做处理,最小宽度为2,l每列换l行,默认为0,内部已做处理,至少换行1行
from calendar import TextCalendar
c = TextCalendar()
print(c.formatmonth(2022, 3))
输出结果:
March 2022
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
prmonth(theyear, themonth, w=0, l=0)
:打印formatmonth(theyear, themonth, w=0, l=0)
的结果,无返回值
from calendar import TextCalendar
c = TextCalendar(firstweekday=6)
c.prmonth(2022, 3)
输出结果:
March 2022
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
formatyear(theyear, w=2, l=1, c=6, m=3)
:以多行字符串形式返回一年的日历,w
每个单元格宽度,l
每列换l行,c
月与月之间的间隔宽度,m
表示将12个月分为m列
from calendar import TextCalendar
c = TextCalendar()
print(c.formatyear(2022))
输出结果:
2022
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 1 2 3 4 5 6 1 2 3 4 5 6
3 4 5 6 7 8 9 7 8 9 10 11 12 13 7 8 9 10 11 12 13
10 11 12 13 14 15 16 14 15 16 17 18 19 20 14 15 16 17 18 19 20
17 18 19 20 21 22 23 21 22 23 24 25 26 27 21 22 23 24 25 26 27
24 25 26 27 28 29 30 28 28 29 30 31
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 1 1 2 3 4 5
4 5 6 7 8 9 10 2 3 4 5 6 7 8 6 7 8 9 10 11 12
11 12 13 14 15 16 17 9 10 11 12 13 14 15 13 14 15 16 17 18 19
18 19 20 21 22 23 24 16 17 18 19 20 21 22 20 21 22 23 24 25 26
25 26 27 28 29 30 23 24 25 26 27 28 29 27 28 29 30
30 31
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 1 2 3 4 5 6 7 1 2 3 4
4 5 6 7 8 9 10 8 9 10 11 12 13 14 5 6 7 8 9 10 11
11 12 13 14 15 16 17 15 16 17 18 19 20 21 12 13 14 15 16 17 18
18 19 20 21 22 23 24 22 23 24 25 26 27 28 19 20 21 22 23 24 25
25 26 27 28 29 30 31 29 30 31 26 27 28 29 30
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 1 2 3 4 5 6 1 2 3 4
3 4 5 6 7 8 9 7 8 9 10 11 12 13 5 6 7 8 9 10 11
10 11 12 13 14 15 16 14 15 16 17 18 19 20 12 13 14 15 16 17 18
17 18 19 20 21 22 23 21 22 23 24 25 26 27 19 20 21 22 23 24 25
24 25 26 27 28 29 30 28 29 30 26 27 28 29 30 31
31
Calendar的子类,firstweekday为一个整数,指定一周的第一天,0是星期一(默认),6为星期日
formatmonth(theyear, themonth, withyear=Ture)
:返回一个月日历的html内容,withyear
是否显示年份,默认为True,即显示年份
from calendar import HTMLCalendar
c = 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"> </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"> </td><td class="noday"> </td><td class="noday"> </td></tr>
</table>
formatyear(theyear, width=3)
:返回一年日历的html内容,width
表示将12个月分为width列
from calendar import HTMLCalendar
c = 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 HTMLCalendar
c = HTMLCalendar()
print(c.formatyearpage(2022, width=4))