返回介绍

5.2 一寸光阴

发布于 2023-06-02 10:04:34 字数 13377 浏览 0 评论 0 收藏 0

1.time包

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

我们能通过Python编程来管理时间和日期。标准库的time包提供了基本的时间功能。下面使用time包:


import time

print(time.time())   # 挂钟时间,单位是秒

还能借助模块time测量程序运行时间。比如:


import time

start = time.clock()
for i in range(100000):
    print(i**2)

end = time.clock()
print(end - start)

上面的程序调用了两次clock()方法,从而测量出镶嵌其间的程序所用的时间。在不同的计算机系统上,clock()的返回值会有所不同。在UNIX系统上,返回的是处理器时间。当CPU处于闲置状态时,处理器时间会暂停。因此,我们获得的是CPU运行时间。在Windows系统上,返回的则是挂钟时间。

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


import time

print("start")
time.sleep(10)     # 休眠10秒
print("wake up")

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


st = time.gmtime()     #返回struct_time格式的UTC时间
st = time.localtime()  #返回struct_time格式的当地时间,当地时区根据系
#统环境决定。

我们也可以反过来,把一个struct_time对象转换为time对象:


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

2.datetime包

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

一个时间点,比如2012年9月3日21时30分,我们可以用如下方式表达:


import datetime

t = datetime.datetime(2012,9,3,21,30)
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)
delta1 = datetime.timedelta(seconds = 600)
delta2 = datetime.timedelta(weeks = 3)

print(t + delta1)          # 打印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对象能进行比较运算,以确定哪个时间间隔更长。比如使用上面的t和t_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会把需要解析的字符串往格式上凑。比如说,在格式中%Y的位置,正好看到"1997",就认为1997是datetime对象t的年。以此类推,就从字符串中获得了t对象的时间信息。

反过来,我们也可以调用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:简写的英文星期几,如Sun、Mon……
%I:表示小时,12小时制
%p:上午或下午,即AM或PM
%f:表示毫秒,如2、0014、000001

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文