time模块
time函数
import time
now = time.time()
print(now)
time函数用于返回当前时间的时间戳,返回的是浮点数
localtime函数
import time
print("当前时间是",time.localtime())
print("0时间戳对应的时间是",time.localtime(0))
结果:
当前时间是 time.struct_time(tm_year=2020, tm_mon=2, tm_mday=2, tm_hour=14, tm_min=55, tm_sec=20, tm_wday=6, tm_yday=33, tm_isdst=0)
0时间戳对应的时间是 time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
localtime函数的目的是将时间戳格式化为本地时间,返回struct_time对象(时间元组),localtime有一个参数用于接收时间戳,如果不提供参数会默认使用当前时间戳。
mktime函数
import time
t = (2018,7,17,17,3,1,1,1,0)
secs = time.mktime(t)
print(secs)
print(time.mktime(time.localtime()))
结果:
1531818181.0
1580627162.0
mktime执行与gmtime,localtime相反的操作,他接受struct_time对象作为参数,返回用秒数表示时间的浮点数,mktime的参数可以是结构化的时间也可以是完整的9位元组元素。
gmtime函数
import time
print(time.gmtime())
print(time.gmtime(0))
结果:
time.struct_time(tm_year=2020, tm_mon=2, tm_mday=2, tm_hour=7, tm_min=12, tm_sec=59, tm_wday=6, tm_yday=33, tm_isdst=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)
gmtime函数将一个时间戳转换为UTC(0时区)的struct_time。
asctime函数
import time
t = (2018,7,17,17,3,1,1,1,0)
print(time.asctime(t))
print(time.asctime(time.localtime()))
结果:
Tue Jul 17 17:03:01 2018
Sun Feb 2 15:19:27 2020
asctime函数接收时间元组并返回一个可读形式的24个字符的字符串。
ctime函数
import time
print(time.ctime())
print(time.ctime(0))
结果:
Sun Feb 2 15:27:40 2020
Thu Jan 1 08:00:00 1970
ctime函数能把一个时间戳转换为time.asctime()的形式。
sleep函数
import time
print(time.ctime())
time.sleep(10)
print(time.ctime())
结果:
Sun Feb 2 15:33:05 2020
Sun Feb 2 15:33:15 2020
sleep函数可以推迟调用线程的运行
clock函数
import time
def process():
time.sleep(10)
print(time.clock())
process()
print(time.clock())
结果:
2e-07
10.0002993
clock函数以浮点数计算的秒数返回当前CPU时间,用来衡量不同程序的消耗。
需要注意的是,在不同系统上clock函数的含义不同,在Unix系统上,他返回的是进程时间,是用秒表示的浮点数(时间戳);而在Windows系统中,第一次调用时返回的是进程运行实际时间,而之后的第二次调用返回的是第一次调用以后到现在的运行时间。
strftime函数
import time
print(time.strftime("%b %d %Y %H:%H:%S",time.localtime()))
结果:
Feb 02 2020 16:16:53
strfttime函数用于接收时间元组,并返回以可读字符串表示的当地时间,格式由format函数决定
strpttime函数
import time
s = time.strptime("Jul 17 2018 09:03:01","%b %d %Y %H:%M:%S")
print(s)
strpttime函数能够根据指定的格式把一个时间字符串解析为时间元组
注:上述两个函数正好能够相互转换
datetime模块
datetime模块包含了日期和时间的所有信息,他的功能十分强大,支持从0001到9999年之间的日期
date对象
date的构造函数
import datetime
date = datetime.date(2018,12,9)
print(date)
结果:
time.struct_time(tm_year=2018, tm_mon=7, tm_mday=17, tm_hour=9, tm_min=3, tm_sec=1, tm_wday=1, tm_yday=198, tm_isdst=-1)
date对象的构造函数需要三个函数year,month,day。
import datetime
today = datetime.date.today()#today方法返回当天日期
print("今天的日期是",today)
print("今天的星期数",today.weekday())#weekday方法返回当前星期数,若是星期一返回0,以此类推
print("今天的星期数",today.isoweekday())#和上个方法相同,若是星期一返回1
print("返回日期为ISO格式"+today.isoformat())#isoformat方法返回日期为ISO格式,即“YYYY-MM-DD”,直接打印date就是该格式
#strftime方法可以格式化输出日期
print("格式化"+today.strftime("%Y-%m-%d"))
print("格式化"+today.strftime("%y-%b-%d"))
time对象
time对象表示一天中的(本地)时间,与任何特定日期无关
import datetime
time = datetime.time()
print(time)
time1 = datetime.time(hour=8,second=7)#time对象的构造函数接收时,分,秒,微妙,时区和信息等参数,并且所有参数都是可选的
print(time1)
#time对象有两个常量min和max,分别对应两个time实例来表示time支持的最大值和最小值
print(datetime.time.min)
print(datetime.time.max)
#isoformat返回时间为ISO格式,即“HH:MM:SS”
print(time1.isoformat())#直接打印出time对象调用的就是isoformat方法
#strftime方法可以格式化输出时间
print(time1.strftime("%H:%M:%S"))
print(time1.strftime("%p %I:%M:%S:%f"))
结果:
E:\anewproject\venv\Scripts\python.exe E:/anewproject/python.py
00:00:00
08:00:07
00:00:00
23:59:59.999999
08:00:07
08:00:07
AM 08:00:07:000000
Process finished with exit code 0
datatime对象
datetime是date和time的结合体,包括date和time的所有信息(常用的时间处理就是datetime)
import datetime
import time
dt = datetime.datetime(year = 2018,month=7,day=1,hour=16,second=10)#需要注意的是年,月,日三个参数是必须的,其余参数是可选的
print(dt)
today = datetime.datetime.today()#返回当前本地时间的datetime对象
print(today)
now = datetime.datetime.now()#如果提供参数则返回所指时区的本地时间,不传递和today相同
print(now)
now1 = datetime.datetime.utcnow()#返回一个当前UTC时间的datetime对象
print(now1)
t1 = datetime.datetime.fromtimestamp(time.time())#根据时间戳创建一个datetime对象,可选参数指定时区信息
print(t1)
print(now.date())#获取date对象
print(now.time())#获取time对象
date = datetime.date(2020,2,2)
time = datetime.time(7,9,33)
dt1 = datetime.datetime.combine(date,time)
print(dt1.strftime("%Y-%m-%d %H:%M:%S"))#格式化输出时间日期
print(dt1.strftime("%y-%m-%d %a %I:%M:%S"))
结果:
E:\anewproject\venv\Scripts\python.exe E:/anewproject/python.py
2018-07-01 16:00:10
2020-02-02 20:06:34.815875
2020-02-02 20:06:34.815875
2020-02-02 12:06:34.815875
2020-02-02 20:06:34.815875
2020-02-02
20:06:34.815875
2020-02-02 07:09:33
20-02-02 Sun 07:09:33
Process finished with exit code 0
Timedelta对象
timedelta表示的是两个日期或时间的差,属性包含:日期,秒,微妙,毫秒,分钟,小时和星期,所有属性都可以选择,并且默认值是0
import datetime
dt1 = datetime.datetime(2018,7,1,16,15,10)
dt2 = dt1 + datetime.timedelta(weeks=-2)
print(dt1-dt2)
print(dt2-dt1)
结果:
14 days, 0:00:00
-14 days, 0:00:00
tzinfo对象
tzinfo是一个时区对象的抽象类,datetime和time对象使用它来提供可自定义的时间调整概念(例如:时区或者夏令营)
tzinifo类不能直接使用,但是可以用datetime.timezone生成。datetime.timezone.utc实现了UTC时区的tzinfo实例
import datetime
utc_now1 = datetime.datetime.now(datetime.timezone.utc)
utc_now2 = datetime.datetime.utcnow()
print(utc_now1)
print(utc_now2)
结果:
2020-02-02 11:49:31.664417+00:00
2020-02-02 11:49:31.664417
datetime.timezone是tzinfo的子类,所以也可以使用datetime.timezone类来实现想要的时区信息。构造该对象只需传入和UTC时间相隔的 timedelta对象即可
import datetime
china_timezone = datetime.timezone(datetime.timedelta(hours=8))
utc_timezone = datetime.timezone(datetime.timedelta(hours=0))
china_time = datetime.datetime.now(china_timezone)
utc_time = datetime.datetime.now(utc_timezone)
print(china_time)
print(utc_time)
结果:
2020-02-02 20:05:06.059839+08:00
2020-02-02 12:05:06.059839+00:00
calender模块
一个和日历相关的模块,用于输出某月的字符月历
import calendar
print(calendar.isleap(2000))#判断是否为闰年
print(calendar.isleap(2018))
print(calendar.leapdays(1990,2018))#返回两个年份之间的闰年总数
print(calendar.leapdays(2017,2018))
print(calendar.month(2020,2))#返回日历
print(calendar.month(2020,2,w=3))
p
rint(calendar.month(2020,2,l=3))
结果:
E:\anewproject\venv\Scripts\python.exe E:/anewproject/python.py
True
False
7
0
February 2020
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
February 2020
Mon Tue Wed Thu Fri Sat Sun
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
February 2020
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
Process finished with exit code 0
import calendar
#calender.monthcalender方法返回一个整数的单层嵌套列表,每个子列表装在一个星期。该月之外的日期都为0,该日之内的日期设为该日的日期
print(calendar.monthcalendar(2020,2))
#calender.monthrange方法返回两个整数组成的元组,第一个整数表示该月的第一天是星期几,第二个整数表示该月的天数
print(calendar.monthrange(2020,2))
#返回给定日期的星期码(从0(星期一)到6(星期日))
print(calendar.weekday(2020,2,2))
print(calendar.calendar(2020))
结果:
E:\anewproject\venv\Scripts\python.exe E:/anewproject/python.py
[[0, 0, 0, 0, 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, 0]]
(5, 29)
6
2020
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 3 4 5 1 2 1
6 7 8 9 10 11 12 3 4 5 6 7 8 9 2 3 4 5 6 7 8
13 14 15 16 17 18 19 10 11 12 13 14 15 16 9 10 11 12 13 14 15
20 21 22 23 24 25 26 17 18 19 20 21 22 23 16 17 18 19 20 21 22
27 28 29 30 31 24 25 26 27 28 29 23 24 25 26 27 28 29
30 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 4 5 1 2 3 1 2 3 4 5 6 7
6 7 8 9 10 11 12 4 5 6 7 8 9 10 8 9 10 11 12 13 14
13 14 15 16 17 18 19 11 12 13 14 15 16 17 15 16 17 18 19 20 21
20 21 22 23 24 25 26 18 19 20 21 22 23 24 22 23 24 25 26 27 28
27 28 29 30 25 26 27 28 29 30 31 29 30
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 4 5 1 2 1 2 3 4 5 6
6 7 8 9 10 11 12 3 4 5 6 7 8 9 7 8 9 10 11 12 13
13 14 15 16 17 18 19 10 11 12 13 14 15 16 14 15 16 17 18 19 20
20 21 22 23 24 25 26 17 18 19 20 21 22 23 21 22 23 24 25 26 27
27 28 29 30 31 24 25 26 27 28 29 30 28 29 30
31
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 3 4 1 1 2 3 4 5 6
5 6 7 8 9 10 11 2 3 4 5 6 7 8 7 8 9 10 11 12 13
12 13 14 15 16 17 18 9 10 11 12 13 14 15 14 15 16 17 18 19 20
19 20 21 22 23 24 25 16 17 18 19 20 21 22 21 22 23 24 25 26 27
26 27 28 29 30 31 23 24 25 26 27 28 29 28 29 30 31
30
Process finished with exit code 0