文章目录
一、time模块
在time模块中,有两个最有用也最常用的函数:time.time()和time.sleep()
——
1. time.time()函数
time.time()函数返回的是自Unix纪元以来的秒数,其值为浮点数,这个数字也被称为UNIX纪元时间戳。
Unix纪元:1970年1月1日0点,即协调世界时间(UTC)
在Python中输入代码:
import time
print(time.time())
打印结果:1582877410.7533364
我调用程序的时间为2020年2月28日16:11,其结果就是Unix纪元与time.time()调用那一刻之间的秒数。
利用time.time()函数,我们可以测量一段代码的运行时间
import time
# 定义一个函数计算1到99999的乘积
def calcProd():
product = 1
for i in range(1,100000):
product *= i
return product
stratTime = time.time() # 记录函数开始时间
prod = calcProd() # 执行函数
endTime = time.time() # 记录函数结束时间
print('The result is %s digits long.'%(len(str(prod)))) # 打印最终结果的位数
print('Took %s seconds to calculate.'%(round(endTime-stratTime,2))) # 打印程序执行时间并保留两位小数
最终的结果
——
2. time.sleep()函数
time.sleep()可以说是一个非常常用的一个函数,能够使程序暂停指定的秒数再运行。
但是在使用time.sleep()函数有一个非常需要注意的地方是,在程序运行过程中进行中断程序是不会中断time.sleep()调用的,而是回在time.sleep()暂停结束后,再抛出KeyboardInterrupt异常。
所以比如要暂停30秒,不是一次性调用time.sleep(30),最好的方式是利用for循环调用30次time.sleep(1)。
import time
for i in range(30):
time.sleep(1)
在这暂停的30秒内,随时中断程序便能够立马看到抛出KeyboardInterrupt异常。
二、datetime模块
datetime模块可以以更方便直观的格式显示日期,同时对日期进行算术运算。
——
1. datetime数据类型
datetime值表示一个特定时刻。
首先我们输入以下代码并运行
import time,datetime
dt = datetime.datetime.now()
print(dt)
print(dt.year,dt.month,dt.day,dt.hour,dt.minute,dt.second,dt.microsecond)
print(datetime.datetime(2020,2,2,2,2,2))
print(datetime.datetime.fromtimestamp(time.time()))
其打印结果
我们可以知道
- datetime.datetime.now()返回一个datetime对象,表示当前的日期和时间
- 该对象包含了以下属性:year、month、day、hour、minute、second和micosecond,分别代表当前时刻的年、月、日、时、分、秒和微秒
- 我们也可以直接向datetime.datetime()函数传入年月日时分秒,从而得到特定时刻的datetime对象
- 利用datetime.datetime.fromtimestamp()函数,我们可以将Unix时间戳转换为datetime对象
——
2. timedelta数据类型
与datetime数据类型相对应的,timedelta数据类型表示一段时间。
import datetime
delta = datetime.timedelta(days=11, hours=10, minutes=9, seconds=8)
print(delta.days, delta.seconds, delta.microseconds) # seconds属性为(10小时、9分钟、8秒,以秒表示)
print(delta.total_seconds()) # 返回以秒表示的总的时间段
print(str(delta)) # 返回格式良好且可读的字符串表示
其打印结果
同样总结一下
- datetime.timedelta()函数可接受关键字参数weeks、days、hours、minutes、seconds、microseconds,主要注意的是timedelta对象中没有year和month
- timedelta对象拥有的时间以天、秒、微秒表示,分别存储在days、seconds和microseconds属性中
- total_seconds()方法返回以秒表示的总时间
- 将timedelta对象传入str(),可以得到格式良好、人类可读的字符串时间
——
4. datetime对象与字符串转换
【01】strftime():datetime对象转换为字符串
strftime()方法的使用类似于Python中的字符串格式化,其完整的指令如下
格式符 | 含义 |
---|---|
%a | 星期的英文单词的缩写:如星期一, 则返回 Mon |
%A | 星期的英文单词的全拼:如星期一,返回 Monday |
%b | 月份的英文单词的缩写:如一月, 则返回 Jan |
%B | 月份的引文单词的缩写:如一月, 则返回 January |
%c | 返回datetime的字符串表示,如02/28/20 17:01:26 |
%d | 返回的是当前时间是当前月的第几天 |
%f | 微秒的表示: 范围: [0,999999] |
%H | 以24小时制表示当前小时 |
%I | 以12小时制表示当前小时 |
%j | 返回 当天是当年的第几天 范围[001,366] |
%m | 返回月份 范围[0,12] |
%M | 返回分钟数 范围 [0,59] |
%P | 返回是上午还是下午–AM or PM |
%S | 返回秒数 范围 [0,61] |
%U | 返回当周是当年的第几周 以周日为第一天 |
%W | 返回当周是当年的第几周 以周一为第一天 |
%w | 当天在当周的天数,范围为[0, 6],6表示星期天 |
%x | 日期的字符串表示 :02/28/20 |
%X | 时间的字符串表示 :17:30:18 |
%y | 两个数字表示的年份 20 |
%Y | 四个数字表示的年份 2020 |
%z | 与utc时间的间隔 (如果是本地时间,返回空字符串) |
%Z | 时区名称(如果是本地时间,返回空字符串) |
代码演示
import datetime
now = datetime.datetime.now()
print(now.strftime('%Y/%m/%d %H:%M:%S'))
print(now.strftime('%I:%M %p'))
打印结果
【02】strptime():字符串转换为datetime对象
striptime()的作用正好与strftime()相反,但是使用的格式符指令是一致。
通过将格式符传入strptime(),从而使函数解析日期字符串。
代码演示:
import datetime
dt = datetime.datetime.strptime('2020/2/28 17:41:00', '%Y/%m/%d %H:%M:%S')
print(dt)
打印结果
——
4. datetime简单运用
【01】计算今天之后1000天的日期
import datetime
dt = datetime.datetime.now()
timepass = datetime.timedelta(days=1000)
dt = dt+timepass
print(dt)
运行程序,得到1000天后的日期
【02】暂停直至特定日期
利用while循环,让程序暂停直至到2020年双十一再运行
import time, datetime
double11 = datetime.datetime(2020,11,11,0,0,0)
while datetime.datetime.now() < double11:
time.sleep(1)