python常用的日期和时间模块
模块先后顺序阅读使用带说明
time模块
calendar模块
和日历相关的模块
该模块主要输出某月的字符月历
import calendar
# isleap方法可用于判断是否为闰年
print(calendar.isleap(2022)) # False
print(calendar.isleap(2018)) # False
#calendar.leapdays方法返回两个年份之间闰年的总数
print(calendar.leapdays(1990,2021)) # 8
print(calendar.leapdays(1990,2022)) # 8
#有四个参数:theyear,themonth,w=0,l=0,
# 返回一个多行字符串格式的year年month月日历
# 两行标题,一周一行
# 每日宽度间隔为w字符,每行的长度为7xw+6
# l是日历的上下字符的间隔,也可以说是列的长度
print(calendar.month(2021,10))
print(calendar.month(2021,10,w=3))
print(calendar.month(2021,10,w=1))
print(calendar.month(2021,10,w=1,l=2))
# calendar.monthcalendar方法返回一个整数的单层嵌套列表
# 每个子列表装载一个星期
# 改月之外的星期均为0,该月之内的日期设为该日的日期,从1开始
print(calendar.monthcalendar(2021,10))
# calendar.monthrange方法返回两个整数组成的元组
# ,第一个整数表示该月的第一天是星期几,第二个整数表示该月的天数
print(calendar.monthrange(2021,10))
# calendar.weekday方法返回给定日期的星期码
print(calendar.weekday(2021,10,25)) # 0,这里算0是星期一
# calendar.calendar方法返回一个多行字符串格式的年历,3个月一行
# 间隔参数用参数c表示,默认值为6.
# 每个宽度间隔为w参数,默认值为2
# 每行长度为21 x w+18+2 x c
print(calendar.calendar(2021))
datetime模块
datetime.date
import datetime
'''
date对象表示在日历中的一个日期(包含年、月、日),date对象的构造函数需要传入三个参数:
year,month,day.
其中year不能小于datetime.MINYEAR的值,也不能大于datetime.MAXYEAR的值(1~9999)
mount只能在1~12中取值
day需要时一个有效数字并且这一天在日历中是真实存在的,例如闰年的2月份就有29天,非闰年的28天
'''
date = datetime.date(2018,7,1)
print(date) # 2018-07-01
# Today方法返回当天日期
today = datetime.date.today()
print(today) # 2021-11-24
# weekday方法返回当前星期数,若是星期一则返回0,星期二则返回1,以此类推
print(today.weekday()) # 2
# isoframt方法返回日期为ISO格式,即"YYYY-MM-DD"的字符串
# 2018-07-01
print(date.isoformat()) # 当然直接打印date对象调用的就是isoformat方法
# strftime方法格式化输出日期
print(date.strftime("%Y-%m-%d")) # 2018-07-01
print(date.strftime("%y-%b-%d")) # 18-Jul-01
datetime.datetime
import datetime
'''
datetime时date与time的结合体,包括date与time的所有信息
常用的事件处理就是(datetime)
'''
# 参数的话年、月、日三个参数是必须的,其余可选
dt = datetime.datetime(year=2021,month=10,day=25,hour=11,second=27)
print(dt) # 2021-10-25 11:00:27
# today方法返回一个表示本地时间的datetime对象,并且对应的tzinfo是None
today = datetime.datetime.today()
print(today) # 2021-10-25 11:32:52.929999
# now方法返回一个表示当前本地时间的datetime对象,如果提供了tzinfo,则获取tzinfo参数所指时区的本地时间,如果不传递tzinfo则
# 和today作用相同
now = datetime.datetime.now()
print(now) # 2021-10-25 11:36:08.475285
# utcnow方法返回一个当前UTC时间的datetime对象
# 相差8小时
now1 = datetime.datetime.utcnow()
print(now1) # 2021-10-25 03:36:08.475285
# formtimestamp方法根据时间戳创建一个datetime对象,可选参数tzinfo指定时区信息
import time
t1 = datetime.datetime.fromtimestamp(time.time()-86400)
print(t1) # 2021-10-24 11:38:25.236994
# date方法获取date对象,time方法获取time对象
print(now.date())# 2021-10-25
print(now.time()) # 11:39:52.968383
# combine方法根据date和time创建一个datetime对象
date = datetime.date(2018,7,1)
time = datetime.time(8,5,10)
dt = datetime.datetime.combine(date,time)
print('类型是',type(dt)) # 类型是 <class 'datetime.datetime'>
print(dt) # 2018-07-01 08:05:10
# strftime方法可以格式化输出日期
print(dt.strftime("%Y-%m-%d %H-%M-%S")) # 2018-07-01 08-05-10
print(dt.strftime("%y-%m-%d %a %I-%M-%S")) # 18-07-01 Sun 08-05-10
# timedelta对象表示的是两个日期或者时间的差,属性包含:日期、秒、微秒、毫秒、分钟、小时、和星期。
# 所有属性均可选,且默认为0
dt1 = datetime.datetime(2018,7,1,16,15,10)
dt2 = dt1 + datetime.timedelta(weeks=-2)
print(dt1) # 2018-07-01 16:15:10
print(dt2) # 2018-06-17 16:15:10
print(dt2 - dt1) # -14 days, 0:00:00
print(dt1 - dt2) # 14 days, 0:00:00
# tzinfo是一个时区对象的抽象类,datetime和time对象使用它来提供可定义的时间调整概念(例如时区和夏令时)
# 但该类不能直接使用,但是可以使用datetime.timezone生成,datetime.timezone.utc实现了UTC时区的tzifon实例
utc1 = datetime.datetime.now(datetime.timezone.utc)
utc2 = datetime.datetime.utcnow()
print(utc1) # 2021-10-25 06:54:11.145099+00:00
print(utc2) # 2021-10-25 06:54:11.145099
# datetime.timezone是tzinfo的子类,所以也可以使用datetime.timezone类来实现想要的时区信息
# 构造datetime.timezone对象时只需传入和UTC时间相隔的timedelta对象即可。
china_tm = datetime.timezone(datetime.timedelta(hours=8))
utc_tm = datetime.timezone(datetime.timedelta(hours=0))
china_time = datetime.datetime.now(china_tm)
utc_time = datetime.datetime.now(utc_tm)
print(china_tm,";",china_time) #UTC+08:00 ; 2021-10-25 14:59:45.313538+08:00
print(utc_tm,";",utc_time) # UTC ; 2021-10-25 06:59:45.313538+00:00
print(datetime.timezone.utc) # 等同于datetime.timezone(datetime.timedelta(hours=0))
datetime.time
import datetime
'''
time对象表示一天中的(本地)时间,与任何特定日期无关,
并且可以通过tzinfo对象进行调整。time对象的构造函数接收时、分、秒、微妙、时区和信息等参数,
并且所有参数都是可选的。(默认不是0就是None)
'''
time1 = datetime.time() # 默认参数
print(time1) # 00:00:00
time2 = datetime.time(hour=8,second=7)
print(time2) # 08:00:07
# 查看time()函数支持的最大值最小值
print(datetime.time.min) # 00:00:00
print(time1.max) # 也可以用赋值的对象查看 # 23:59:59.999999
print(time1.resolution) # time对象的最小单位 0:00:00.000001
# isoformat格式化输出时间
# 直接打印datetime.time()对象就是调用了isoformat方法
print(time1.isoformat()) # 00:00:00 00:00:00
# strftime方法可以格式化输出时间
time = datetime.time(hour=16,second=17,microsecond=123)
print(time.strftime("%H:%M:%S")) # 16:00:17
print(time.strftime("%p %I:%M:%S:%f")) # PM 04:00:17:000123
dateutil模块
该库是datetime的扩展库,但不是内置库,需要自行安装
库名:python-dateutil
time模块
time.asctime
接收时间元组并返回一个可读的形式
接收的参数可以是9个元素的元组,也可以是gmtime()或localtime()返回的值(time_struct类型)
import time
t = (2021,10,25,20,3,1,1,10,1) # 这个时间元组是乱写的,不标准,不符合time_struct格式的
print("time.asctime(t)",time.asctime(t))
print("time.asctime(time.localtime()):",time.asctime(time.localtime()))
time.ctime
能把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式
如果没给出参数,则time.time()为默认参数
import time
print("time.ctime() %s" % time.ctime())
print("time.ctime(0) %s"% time.ctime(0))
time.gmtime
能将一个时间戳转化为UTC时区(0时区)的struct_time,可选的参数时时间戳
import time
print("time.gmtime():",time.gmtime())
print("time.gmtime(0):",time.gmtime(0))
time.localtime
将时间戳格式化为本地时间,返回struct_time对象
括号内可接收时间戳,返回本地时间,不提供时间戳,则默认使用当前时间戳
返回返回struct_time对象:一个元组装起来的九组数字处理时间
import time
print('当前时间:',time.localtime())
print('时间戳的开始:',time.localtime(0))
time.mktime
mktime()与localtime函数执行相反的操作,它接收struct_time对象作为参数,返回用秒数来表示时间的浮点数。
import time
t = (2018,7,17,17,3,1,1,1,0)
# 单独的数字,没有关键字参数,这里称结构化的时间
secs = time.mktime(t)
print("time.mktime(t): %f" % secs)
# 参数可以是完整的9位元组元素,有关键字参数
print("time.mktime(time.localtime(secs)):%f"% time.mktime(time.localtime(secs)))
sleep
import time
# sleep函数推迟调用线程的运行,可通过参数secs指定秒数,表示该进程挂起的时间
print(" start:%s"%time.ctime())
time.sleep(3)
print("end: %s"% time.ctime())
time.strftime
这里不使用time其实也可以,strftime()是内置函数
time.mktime(a)将展示时间的元组转化为时间戳
import time
# 接收时间元组参数,但格式必须是字符串,并返回可读字符串表示时间,这里的可读指的是可以格式化字符串
a = (2021,10,25,10,26,10,0,22,0)
t = time.mktime(a)
print(t) # 1635128770.0
print(time.strftime("%b %d %Y %H:%M:%S",time.gmtime(t))) # Oct 25 2021 02:26:10
print(time.gmtime(0)) # 这里需要的参数是int类型的数字
print(time.strftime(str(a))) # 返回9个元组的参数
time.strptime
将指定格式的字符串(表示时间的)解析为时间元组(time_struct对象)
import time
struct_time = time.strptime("Oct 25 2021 02:26:10","%b %d %Y %H:%M:%S")
print("返回的元组:",struct_time)
# time.struct_time(tm_year=2021, tm_mon=10, tm_mday=25, tm_hour=2, tm_min=26, tm_sec=10, tm_wday=0, tm_yday=298, tm_isdst=-1)
# strptime和timestamp正好是能够互相转换的函数;无法直接拿上来就直接格式化
time.time
import time
print(time.time()) # 1635127096.254583返回一个具体时间戳
a = time.time()
b = time.time()
print(a-b)
2022/6/23
新增概念
time.struct_time 及有哪些格式化时间字符串,哪些接口可以产生该omi参数
time.localtime()产生struct_time格式的日期。
time.strftime('%Y-%m-%d',time.localtime()) # Y m d 分别代表格式化字符串
产生时间戳的time函数
time.time() 用于获取当前时间的时间戳,
努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。