07-模块与包-2
模块与包
日期、时间相关的模块
日期(calendar)
- calendar模块输出日历及相关函数,默认以礼拜一为一周的第一天、礼拜日为一周的最后一天。
- setfirstweekday()方法可以将任意一天设置为第一天,官方文档:https://docs.python.org/zh-cn/3/library/calendar.html。
- 打印2020年的日历
>>> import calendar >>> calendar.calendar(2020) #对机器友好,对人不友好 >>> print(calendar.calendar(2020)) #print输出,对人友好 >>> calendar.firstweekday()#每周第一天是星期一,对应编号是0 0 >>> calendar.setfirstweekday(6)#设置每周日是第一天,对应编号是6 >>> calendar.firstweekday() 6 >>> print(calendar.calendar(2020))


- 打印2020年11月的日历
>>> print(calendar.month(2020,11))#以友好方式展示日历 November 2020 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 >>> print(calendar.monthcalendar(2020,11)) [[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, 0, 0, 0, 0, 0]] #以嵌套列表展示当月日期,日期为空则用0表示 >>> print(calendar.monthrange(2020,11)) (6, 30) #6表示当前是以哪天的下标作为每周第一天,30表示当月有多少天数 >>> print(calendar.isleap(2020))#isleap用于判断是否是闰年 True >>> print(calendar.isleap(2019)) False >>> print(calendar.leapdays(2000,2019))#表示2000年到2019年有5个年份是闰年 5 >>> print(calendar.weekday(2000,11,11))#表示2000年11月11日是星期六 5 >>> print(calendar.weekday(2010,11,11))#表示2010年11月11日是星期四 3
时间模块(time)
- time模块提供了各种时间相关的函数,此模块中的功能可能无法处理纪元之前或将来远期日期和时间,对未来的截止点由C库决定,例如对于32位系统,通常是在2038年。此模块中定义的大多数函数调用都具有相同名称的平台C库函数。
- UTC(世界协调时):又称格林威治标准时间(GMT),与之对应的是各时区的本地时间,如在中国为UTC+8。DST(Daylight Saving Time)即夏令时。
- epoch:表示开始计时的时刻。不同平台七点值不一样,如Unix系统epoch值为1970年01月01日的00:00:00 UTC
- timestamp(时间戳):当前时刻与格林威治时间(GMT)即与1970年01月01日的0时0分0秒的时间差值(单位:秒;不含润秒),返回时间戳方式的函数主要有time(),clock()等。
- 元组(struct_time):struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()
>>> import time >>> time.gmtime()#不加参数显示当前时间值 time.struct_time(tm_year=2021, tm_mon=2, tm_mday=7, tm_hour=7, tm_min=36, tm_sec=22, tm_wday=6, tm_yday=38, tm_isdst=0) >>> time.gmtime(0)#参数0,表示起点时间 time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0) >>> time.time <built-in function time> >>> time.time() 1612683399.9588227#表示执行time.time的时刻与linux平台的GMT起点时刻的差值

- 参考资料
- https://www.cnblogs.com/tkqasn/p/6001134.html
- https://www.cnblogs.com/awakenedy/articles/9182036.html
- https://www.jianshu.com/p/ff329e881683
- https://www.php.cn/python-tutorials-410535.html
时间戳转换为字符串 >>> import time >>> time.time()#时间戳 1612685383.513653 >>> time.gmtime() time.struct_time(tm_year=2021, tm_mon=2, tm_mday=7, tm_hour=8, tm_min=9, tm_sec=57, tm_wday=6, tm_yday=38, tm_isdst=0) >>> time.localtime() time.struct_time(tm_year=2021, tm_mon=2, tm_mday=7, tm_hour=16, tm_min=10, tm_sec=7, tm_wday=6, tm_yday=38, tm_isdst=0) >>> time.gmtime() time.struct_time(tm_year=2021, tm_mon=2, tm_mday=7, tm_hour=8, tm_min=10, tm_sec=50, tm_wday=6, tm_yday=38, tm_isdst=0) >>> time.gmtime().tm_year 2021 >>> time.mktime(time.localtime())#struct_time类型转换位时间戳 1612685514.0 >>> time.asctime(time.localtime())#struct_time类型转换为字符串 'Sun Feb 7 16:12:15 2021' >>> time.asctime() 'Sun Feb 7 16:12:21 2021' >>> time.asctime(time.gmtime())#元数据转字符串 'Sun Feb 7 08:12:37 2021' >>> >>> time.ctime() 'Sun Feb 7 16:12:57 2021' >>> time.ctime(time.time()) 'Sun Feb 7 16:13:06 2021' >>> >>> time.ctime(1612685514.0)#时间戳转字符串 'Sun Feb 7 16:11:54 2021'
- time模块常用函数

>>> a = "Sat Mar 28 22:24:24 2016" #time.mktime将指定字符串时间,转换为时间戳 >>> print(time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))) 1459175064.0 >>> print(time.mktime(time.strptime('Sun Feb 7 17:38:15 2021',"%a %b %d %H:%M:%S %Y"))) 1612690695.0 #将struct_time类型时间,转换为指定格式的时间 >>> time.gmtime() time.struct_time(tm_year=2021, tm_mon=2, tm_mday=7, tm_hour=9, tm_min=57, tm_sec=3, tm_wday=6, tm_yday=38, tm_isdst=0) >>> time.strftime("%Y-%m-%d %X", time.localtime()) '2021-02-07 17:57:26' #time.strptime将指定字符串时间,转换为struct_time类型时间 >>> print(time.strptime('Sun Feb 7 17:38:15 2021',"%a %b %d %H:%M:%S %Y")) time.struct_time(tm_year=2021, tm_mon=2, tm_mday=7, tm_hour=17, tm_min=38, tm_sec=15, tm_wday=6, tm_yday=38, tm_isdst=-1)

- python时间日期格式化符号
- %y:两位数的年份表示(00-99)
- %Y:四位数的年份表示(000-9999)
- %m:月份(01-12)
- %d:月内中的一天(0-31)
- %H:24小时制小时数(0-23)
- %I:12小时制小时数(01-12)
- %M:分钟数(00-59)
- %S:秒(00-59)
- %a:本地简化星期名称
- %A:本地完整星期名称
- %b:本地简化的月份名称
- %B:本地完整的月份名称
- %c:本地相应的日期表示和时间表示
- %j:年内的一天(001-366)
- %p:本地A.M.或P.M.的等价符
- %U:一年中的星期数(00-53)星期天为星期的开始
- %w:星期(0-6),星期天为星期的开始
- %W:一年中的星期数(00-53)星期一为星期的开始
- %x:本地相应的日期表示
- %X:本地相应的时间表示
- %Z:当前时区的名称
- %%:%号本身
时间模块(datetime)
- datetime模块:time模块的进一步封装,对用户更加友好
- datetime模块的主要类:
- datetime.date:提供日期(年月日)的处理
- datetime.time:提供时间(时分秒)的处理
- datetime.datetime:同时提供日期和时间的处理
- datetime.timedelta:两个date、time、datetime实例之间的时间间隔
- datetime.tzinfo:时区
- 官方网址:https://docs.python.org/3/library/datetime.html
- datetime.date类
- 类方法和类属性
| datetime.date.max | date对象所能表示的最大日期。 |
| datetime.date.min | date对象所能表示的最小日期。 |
| datetime.date.resolution | date对象表示日期的最小单位。这里是天。 |
| datetime.date.today() | 返回一个表示当前本地日期的 date 对象。 |
| datetime.date.fromtimestamp(timestamp) | 根据给定的时间戮,返回一个date 对象。 |
| datetime.fromordinal(ordinal) | 将Gregorian日历时间转换为date对象(Gregorian Calendar:西方国家一种日历表示方法,类似于中国农历) |
-
- 使用示例
#!/usr/bin/env python # -*- coding=utf-8 -*- import datetime import time print(datetime.date.max) print(datetime.date.min) print(datetime.date.today()) print(datetime.date.resolution) print(datetime.date.fromtimestamp(time.time())) #执行结果 PS F:\PyProject\pyscripts\project1\mymodule> python .\date_time.py 9999-12-31 0001-01-01 2021-02-07 1 day, 0:00:00 2021-02-07
-
- datetime.date方法与属性
| datetime.date.year | 年 |
| datetime.date.month | 月 |
| datetime.date.day | 日 |
| datetime.date.replace(year[,month[,day]]) | 替换并生成返回一个新的日期对象,原日期对象不变 |
| datetime.date.timetuple() | 返回日期对应的时间元组(time.struct_time)对象 |
| datetime.date.toordinal() | 返回日期是自0001-01-01开始的第多少天 |
| datetime.date.weekday() | 返回日期是星期几,[0,6],0表示星期一,1表示星期二 |
| datetime.date.isoweekday() | 返回日期是星期几,[1,7],1表示星期一,2表示星期二 |
| datetime.date.isocalendar() | 返回格式为(year,weekday,isoweekday)的元组 |
| datetime.date.isoformat() | 返回‘YYYY-MM-DD’格式的日期字符串 |
| datetime.date.strftime() | 自定义格式化字符串(和time模块的strftime()方法相同) |
-
- 使用示例
import datetime import time print(datetime.date.year) # 显示内存地址 print(datetime.date.today().year)# 本地时时间的年 print(datetime.date.fromtimestamp(time.time()+3600000).month)# 给定时间戳的月 print(datetime.date.today().day) # 日 print(datetime.date.today().replace(year=2019))#替换并生成返回一个新的日期对象,原日期对象不变 print(datetime.date.today().timetuple())#返回日期对应的时间元组(time.struct_time)对象 print(datetime.date.today().toordinal())#返回自0001-01-01开始的第多少天 print(datetime.date.today().weekday())#返回星期几,[0,6],0表示星期一,1表示星期二 print(datetime.date.today().isoweekday())#返回星期几,[1,7],1表示星期一,2表示星期二 print(datetime.date.today().isocalendar())#返回格式为(year,weekday,isoweekday)的元组 print(datetime.date.today().isoformat())#返回‘YYYY-MM-DD’格式的日期字符串 print(datetime.date.today().strftime('%Y-%m-%d-%a-%I'))#自定义格式化字符串(和time模块的strftime()方法相同) #运行结果 PS F:\PyProject\pyscripts\project1\mymodule> python .\date_time.py <attribute 'year' of 'datetime.date' objects> 2021 3 7 2019-02-07 time.struct_time(tm_year=2021, tm_mon=2, tm_mday=7, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=38, tm_isdst=-1) 737828 6 7 (2021, 5, 7) 2021-02-07 2021-02-07-Sun-12
-
-
datetime.date对象中包含的方法与属性
-
用于日期比较大小的方法
-
-
>>> a=datetime.date(2017,3,1) >>> b=datetime.date(2017,3,15) >>> a.__eq__(b) False >>> a.__ge__(b) False >>> a.__gt__(b) False >>> a.__le__(b) True >>> a.__lt__(b) True >>> a.__ne__(b) True
-
-
- 获得二个日期相差多少天:使用
__sub__(...)和__rsub__(...)
- 获得二个日期相差多少天:使用
-
>>> a = datetime.date(2017, 3, 22)
>>> b = datetime.date(2017, 3, 15)
>>> a.__sub__(b)
datetime.timedelta(days=7)
>>> a.__rsub__(b)
datetime.timedelta(days=-7)
>>> a.__sub__(b).days
7
>>> a.__rsub__(b).days
-7
- datetime.time类
- 类方法和类属性
- time类和time模块各自独立,语法:datetime.time(hour[,minute[,decond[,microsecond[,tzinfo]]]])
| datetime.time.max | 表示的最大时间 |
| datetime.time.min | 表示的最小时间 |
| datetime.time.resolution | 时间的最小单位,这里是1微秒 |
-
- datetime.time常用的方法与属性
| datetime.time.hour | 时 |
| datetime.time.minute | 分 |
| datetime.time.second | 秒 |
| datetime.time.microsecond | 微秒 |
| datetime.time.tzinfo | 时区 |
| datetime.time.replace() | 用参数指定替代(时,分,秒,微秒,时区)对象,生成并返回新的对象 |
| datetime.time.isoformat() | 返回'HH:MM:SS'格式字符串 |
| datetime.time.strftime() | 返回自定义格式化字符串 |
- datetime.datetime类
- 语法(相当于date和time结合记起来):datetime.datetime(year,month,day[,hour[,minute[,second[,microsecond[,tzinfo]]]]])
- 类方法与类属性
| datetime.datetime.max | date对象所能表示的最大日期。 |
| datetime.datetime.min | date对象所能表示的最小日期。 |
| datetime.datetime.resolution | date对象表示日期的最小单位。这里是天。 |
| datetime.datetime.today() | 返回一个表示当前本地日期的 date 对象。 |
| datetime.datetime.now([tz]) | 返回当前本地时间,如果指定tz,则返回tz时区当地时间 |
|
datetime.datetime.utcnow()
|
返回当前UTC时间
|
| datetime.datetime.fromtimestamp(timestamp) | 根据给定的时间戮,返回一个date 对象。 |
| datetime.datetime.utcfromtimestamp(timestamp) | 根据时间戳创建一个datetime对象 |
| datetime.datetime.combine(date,time) | 把指定的date和time对象整合为datetime对象 |
| datetime.datetime.strftime(date_string,format) | 将格式化字符串转换为datetime对象 |
-
- 使用示例
# 3.0 datetime.datetime 类方法和类属性 import datetime import time print(datetime.datetime.max)#date对象所能表示的最大日期。 print(datetime.datetime.min)#date对象所能表示的最小日期。 print(datetime.datetime.resolution)#date对象表示日期的最小单位。这里是天。 print(datetime.datetime.today())#返回一个表示当前本地日期的 date 对象。 print(datetime.datetime.now())#返回当前本地时间,如果指定tz,则返回tz时区当地时间 print(datetime.datetime.utcnow())#返回当前UTC时间 print(datetime.datetime.fromtimestamp(time.time()))#根据给定的时间戮,返回一个date 对象。 print(datetime.datetime.utcfromtimestamp(time.time()))#根据时间戳创建一个datetime对象 print(datetime.datetime.combine(datetime.date(2019, 3, 5),datetime.time(3, 2, 45)))#把指定的date和time对象整合为datetime对象 print(datetime.datetime.strftime(datetime.date(2019,9,2),'%Y-%m-%d %X'))#将格式化字符串转换为datetime对象 #运行结果 PS F:\PyProject\pyscripts\project1\mymodule> python .\date_time.py 9999-12-31 23:59:59.999999 0001-01-01 00:00:00 0:00:00.000001 2021-02-07 21:53:23.289024 2021-02-07 21:53:23.289995 2021-02-07 13:53:23.289995 2021-02-07 21:53:23.289995 2021-02-07 13:53:23.289995 2019-03-05 03:02:45 2019-09-02 00:00:00
-
- datetime.datetime常用方法和属性
| datetime.datetime.year | 年 |
| datetime.datetime.month | 月 |
| datetime.datetime.day | 日 |
| datetime.datetime.hour | 时 |
| datetime.datetime.minute | 分 |
| datetime.datetime.second | 秒 |
| datetime.datetime.microsecond | 微秒 |
| datetime.datetime.tzinfo | 时区信息 |
| datetime.datetime.date() | 获取dt的date对象 |
| datetime.datetime.time() | 获取dt的time对象,tzinfo为none |
| datetime.datetime.timetz() | 获取dt的time对象,tzinfo为与datetime的tzinfo相同 |
| datetime.datetime.replace() | 指定参数替代(年,月,日,时,分,秒,微妙,时区),生成并返回新对象 |
| datetime.datetime.timetuple() | 返回日期时间对应的时间元组(time.struct_time)(不包括tzinfo) |
| datetime.datetime.utctimetuple() | 返回UTC时间对应的时间元组(不包括tzinfo) |
| datetime.datetime.timestamp() | 返回dt对象对应的时间戳 |
| datetime.datetime.toordinal() | 返回日期是是自 0001-01-01 开始的第多少天(与date类相同) |
| datetime.datetime.weekday() | 返回日期是星期几,[1, 7], 1表示星期一(与date类相同) |
| datetime.datetime.isocalendar() | 返回格式如(year,month,day)的时间元组(与date类相同) |
| datetime.datetime.isoformat() | 返回格式如'YYYY-MM-DD HH:MM:SS'的字符串 |
| datetime.datetime.ctime() | 等价与time模块的time.ctime(time.mktime(d.timetuple())) |
| datetime.datetime.strftime(date_string,format) | 将格式化字符串转换为datetime对象 |
-
- 使用示例
import datetime,time # 3.1 datetime.datetime 常用方法和属性 print(datetime.datetime.today().tzinfo)#时区信息 print(datetime.datetime.today().date())#获取dt的date对象 print(datetime.datetime.today().time())#获取dt的time对象,tzinfo为none print(datetime.datetime.today().timetz())#获取dt的time对象,tzinfo为与datetime的tzinfo相同 print(datetime.datetime.today().timetuple())#返回日期时间对应的时间元组(time.struct_time)(不包括tzinfo) print(datetime.datetime.today().timestamp())#返回dt对象对应的时间戳 print(datetime.datetime.today().ctime())#等价与time模块的time.ctime(time.mktime(d.timetuple())) #运行结果 PS F:\PyProject\pyscripts\project1\mymodule> python .\date_time.py None 2021-02-08 16:44:12.065155 16:44:12.065155 time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=16, tm_min=44, tm_sec=12, tm_wday=0, tm_yday=39, tm_isdst=-1) 1612773852.065155 Mon Feb 8 16:44:12 2021
- datetime.timedelta类
- 时间加减(代表了两个datetime之间的时间差),语法:datetime.timedalta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0 ,hours=0,weeks=0)
- 在日期上做天,小时,分钟,秒,毫秒,微秒,周 的时间计算
- 1毫秒转换为1000微秒
- 1分钟转换为60秒
- 1小时转换为3600秒
- 1周转换为7天
- 注意:datetime.timedelta内部只存储 days,seconds,microseconds
- datetime.timedelta常用方法和属性
| datetime.timedelta.days | 天(范围[-999999999,999999999]) |
| datetime.timedelta.seconds | 秒(范围[0,86399]) |
| datetime.timedelta.microseconds | 微秒(范围[0,999999]) |
| datetime.timedelta.total_seconds() | 以秒为单位返回该时间差 |
-
- 使用示例
>>> import datetime,time >>> m = datetime.datetime.now() >>> print(m) 2021-02-08 17:05:46.028192 >>> l = m + datetime.timedelta(3) >>> print(l) 2021-02-11 17:05:46.028192 >>> n = m + datetime.timedelta(hours=4) >>> print(n) 2021-02-08 21:05:46.028192 >>> span = l - m >>> print(span) 3 days, 0:00:00 >>> print(span.total_seconds()) 259200.0
-
- 例题1:计算上周一和周日的日期
import datetime,time >>> today = datetime.date.today() >>> today_weekday = today.isoweekday()#返回日期是星期几,[1,7],1表示星期一,2表示星期二 >>> today_weekday 1 >>> last_sunday = today - datetime.timedelta(days=today_weekday) >>> last_sunday datetime.date(2021, 2, 7) >>> last_monday = today - datetime.timedelta(days=7) >>> last_monday datetime.date(2021, 2, 1)
-
- 例题2:计算指定日期当月最后一天的日期和该月天数
import datetime,time import calendar # 例题:计算指定日期当月最后一天的日期和该月天数 #字符串转日期date格式 pt_day =input("input your day:") pt_year = time.strptime(pt_day,"%Y-%m-%d").tm_year pt_mon = time.strptime(pt_day,"%Y-%m-%d").tm_mon last_day = calendar.monthrange(time.strptime(pt_day,'%Y-%m-%d').tm_year,time.strptime(pt_day,'%Y-%m-%d').tm_mon)[1] totol_days = calendar.monthrange(time.strptime(pt_day,'%Y-%m-%d').tm_year,time.strptime(pt_day,'%Y-%m-%d').tm_mon)[1] print("输入的年份是:", pt_year) print("输入的月份是:",pt_mon) print("当月最后一天是:",last_day) print("当月共有天数是:",totol_days) #运行结果 PS F:\PyProject\pyscripts\project1\mymodule> python .\judge_month_days.py input your day:2005-05-17 输入的年份是: 2005 输入的月份是: 5 当月最后一天是: 31 当月共有天数是: 31 PS F:\PyProject\pyscripts\project1\mymodule> python .\judge_month_days.py input your day:2005-02-24 输入的年份是: 2005 输入的月份是: 2 当月最后一天是: 28 当月共有天数是: 28
- datetime.tzinfo时区类
tzinfo是一个抽象类,所以不能直接被实例化;时间转换需要用datetime和pytz来转换时区

浙公网安备 33010602011771号