云学python (第5章对象带你飞之time 时间)《vamei-从Python开始学编程》 笔记

5.2 —寸光阴

1.time

计算机可以用来计时。从硬件上来说,计算机的主板上有一个计时的表,可以手动或者根据网络时间来调表。这块表有自己的电池,所以即使断电表也不会停。在硬件的基础上计算机可以提供挂钟时间(Wall Clock Time)挂钟时间是从某个固定时间起点到现在的时间间隔。对UNIX系统来说,起点时间是197011日的000秒。 其他的日期信息都是从挂钟时间计算得到的。此外,计算机还可以测量 CPU实际运行的时间,也就是处理器时间(Processor Clock Time),以测 量计算机性能。当CPU处于闲置状态时,处理器时间会暂停。

标准库的time包提供了基本的时间功能。下面使用time包:

import time

print(time.time())

#挂钟时间,单位是秒

【真无聊时间】

 

还能借助模块time测量程序运行时间。(程序计时器)在pycharm中加Python3.8环境,调用time.clock出异常:AttributeError module 'time' has no attribute 'clock',要用time.perf_counter()替换clock()

import time 
start = time.perf_counter()
for i in range(10):
    print(i**2)
end = time.perf_counter()

print(end-start)
_________________
0
1
4
9
16
25
36
49
64
81
3.158300000000169e-05

在不同的计算机系统上,clock()的返回值会有所不同。在UNIX 系统上,返回的是处理器时间。当CPU处于闲置状态时,处理器时间会暂停。因此,我们获得的是CPU运行时间。在Windows系统上,返回的则是挂钟时间。

方法sleep()可以让程序休眠。根据sleep()接收到的参数,程序会在某时间间隔之后醒来继续运行:

import time

print("start")

time.sleep(10)

print("wake up")

time包还定义了struct_time对象。该对象将挂钟时间转换为年、月、 日、时、分、秒等,存储在该对象的各个属性中,比如tm_year> tm_mon> tm mday 下面几种方法可以将挂钟时间转换为struct time对象:

import time 
st=time.gmtime() #返回 struct_time 格式的 UTC 时间
_______
time.struct_time(tm_year=2022, tm_mon=4, tm_mday=18, tm_hour=2, tm_min=11, tm_sec=51, tm_wday=0, tm_yday=108, tm_isdst=0)

st=time.localtime() #返回struct_time格式的当地时间,当地时区根据系统环境决定。
print (st)
_________
time.struct_time(tm_year=2022, tm_mon=4, tm_mday=18, tm_hour=10, tm_min=12, tm_sec=2, tm_wday=0, tm_yday=108, tm_isdst=0)

把一个struct_time对象转换为time对象:

import time
st = time.gmtime()
s=time.mktime(st) #将struct_time格式转换成挂钟时间
print(s)
________
1650219287.0

2. datetime 

datetime包是基于time包的一个高级包,用起来更加便利。date是指年、月、日构成的日期,相当于日历。time是指时、分、秒、毫秒构成的一天24小时中的具体时间,提供了与手表类似的功能。因此,datetime模块下有两个类: datetime.date类和datetime.time类。也可以直接调用datetime.datetime类。这里只介绍综合性的datetime.datetime 类,单独的datetime.datedatetime.time类与之类似。

一个时间点,比如2022年4月18日10时20分:

import datetime
t=datetime.datetime(2022,4,18,10,20)

print(t)

t的属性:hour, minute, second, millisecond, microsecond:小时、分、秒、毫秒、微秒

year,month, day, weekday:年、月、日、星期几

借助datetime包可以进行时间间隔的运算。它包含一个专门代表时间间隔对象的类,即timedelta一个datetime.datetime的时间点加上一个时间间隔,就可以得到一个新的时间点。比如今天的上午3点加上5个小时,就可以得到今天的上午8点。同理,两个时间点相减可以得到一个时间间隔:

import datetime

t = datetime.datetime(2012,9,3,21,30) 
t_next = datetime.datetime(2012,9,5,23,30)
deltal = datetime.timedelta(seconds = 600) 
delta2 = datetime.timedelta(weeks = 3)

print(t+deltal)
# 打印 2012-09-03 21:40:00
print(t+delta2)
# 打印 2012-09-24 21:30:00
print(t_next-t)
# 打印 2 days, 2:00:00

在给datetime.timedelta传递参数时,除了上面的秒(seconds)和星期(weeks)外,还可以是天(days)小时(hours)毫秒(milliseconds)、 微秒 (microseconds)。

两个datetime对象能进行比较运算,以确定哪个时间间隔更长。比如 使用上面的tt_next

print(t>t_next)
_____
False

3.日期格式

对于包含有时间信息的字符串来说,我们可以借助datetime包,把它

转换成datetime类的对象,比如:

from datetime import datetime

str="output-1997-12-23-030000.txt"

format="output-%Y-%m-%d-%H%M%S.txt"

t=datetime.strptime(str,format)

print(t) #打印 1997-12-23 03:00:00

包含有时间信息的字符串是”output-1997-12-23-030000.txt”是一个文件名。字符串format定义了一个格式。这个格式中包含了几个由%引领的特殊字符,用来代表不同时间信息。Y表示年份、%m表示月、%d 表示日、H表示24小时制的小时、%M表示分、%S表示秒。通过strptime方法,Python会把需要解析的字符串往格式上凑。

反过来也可以调用datetime对象的strftime方法,将一个 datetime对象转换为特定格式的字符串,比如:

from datetime import datetime

format = "%Y-%M-%D %H:%M"

t = datetime(2012,9,5,23,30)

print(t.strftime(format)) 

#打印2012-09-05 23:30

可以看到,格式化转化的关键是%号引领的特殊符号。这些特殊符号 有很多种,分别代表不同的时间信息。常用的特殊符号还有:

                %A:  表示英文的星期几,如Sunday、Monday

%a:简写的英文星期几,如SunMon

%I:表示小时,12小时制

%p:上午或下午,即AMPM

%f:表示毫秒,如 20014000001 

但如果想在格式中表达%这个字符本身,而不是特殊符号,那么可以 使用%%o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值