Python 中的 time 模块
写代码时,常常会遇到处理时间和日期的问题。在 Python 中,与时间处理最相关的模块是 time 和 datetime。今天我们介绍下 time 模块的常用功能。
time 模块包含一些函数用于获取时钟时间和处理器的运行时间,还提供了基本解析和字符串格式化工具。它是由底层 C 库提供与时间相关的函数,因此在不同的平台上会有细微的差别。
使用 time 模块前需要先引入模块
import time
time.localtime([seconds])
返回本地时间,类型为时间元组 time.struct_time。默认为当前时间,也可以接受时间戳参数。
所谓时间戳,是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。
local = time.localtime()
print(local)
print(time.localtime(1400000000))
输出
time.struct_time(tm_year=2016, tm_mon=10, tm_mday=8, tm_hour=16, tm_min=34, tm_sec=1, tm_wday=5, tm_yday=282, tm_isdst=0)
time.struct_time(tm_year=2014, tm_mon=5, tm_mday=14, tm_hour=0, tm_min=53, tm_sec=20, tm_wday=2, tm_yday=134, tm_isdst=0)
time.gmtime([secs])
与 localtime 类似,但返回的是格林威治天文时间下的时间元组,也就是0时区的时间。
print(time.gmtime())
print(time.gmtime(1400000000))
输出
time.struct_time(tm_year=2016, tm_mon=10, tm_mday=8, tm_hour=8, tm_min=49, tm_sec=31, tm_wday=5, tm_yday=282, tm_isdst=0)
time.struct_time(tm_year=2014, tm_mon=5, tm_mday=13, tm_hour=16, tm_min=53, tm_sec=20, tm_wday=1, tm_yday=133, tm_isdst=0)
time.asctime([tupletime])
接受时间元组并返回一个可读的形式为Weekday Month Day HH:MM:SS Year的字符。
在之前代码的基础上
asc = time.asctime(local)
print(asc)
输出
Sat Oct 8 16:34:01 2016
time.mktime(tupletime)
接受时间元组并返回时间辍。
time.mktime(local)
输出
1475915641.0
time.ctime()
返回当前时间,相当于 time.asctime(time.localtime())。
print(time.ctime())
输出
Sat Oct 8 16:37:37 2016
time.sleep(second)
设定当前线程的休眠时间,走完设定时间后再次启动当前线程。
这个方法常被用来控制程序的延时运行。比如在抓取网页的过程中,增加 sleep 休眠,控制抓取请求的频率不要过高,防止被对方服务器拒绝。
print(time.ctime())
time.sleep(5)
print(time.ctime())
输出
Sat Oct 8 16:45:07 2016
Sat Oct 8 16:45:12 2016
time.time()
返回当前时间的时间戳。
print(time.time())
输出
1475917025.59118
在实际应用中,这个函数也经常被用于查看一个代码片的执行时间。在精度要求不是很高的情况下,可以利用执行代码前后的time.time()之差进行计算。
start = time.time()
c = 0
for i in range(1000000):
c += i
end = time.time()
print(end-start)
输出
0.151529073715
也可以将代码片放入计算时间的装饰器中进行运行。
def timer(func):
start = time.time()
func()
end = time.time()
print(end-start)
return func
@timer
def fn():
c = 0
for i in range(1000000):
c += i
fn()
time.clock()
以浮点数计算的秒数返回当前的 CPU 时间。
在不同的系统上含义不同。在UNIX系统上,它返回的是"进程时间",它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间,而第二次之后的调用是自第一次调用以后到现在的运行时间。
start_time = time.clock()
print(start_time)
time.sleep(3)
print(time.clock())
输出
5.701806902607436e-07
3.0820826419892464
time.strftime(fmt[,tupletime])
接收以时间元组,并返回字符串。
my_format = "%Y/%m/%d %H:%M:%S"
my_time = time.localtime()
print(my_time)
print(time.strftime(my_format, my_time))
输出
time.struct_time(tm_year=2016, tm_mon=10, tm_mday=8, tm_hour=17, tm_min=8, tm_sec=7, tm_wday=5, tm_yday=282, tm_isdst=0)
2016/10/08 17:08:07
输出参数中,格式化字符串的含义:
格式化字符串 | 日期/时间单元 | 范围 |
%Y | 年 | 1900-... |
%m | 月 | 12-Jan |
%B | 月名 | January,... |
%b | 月名缩写 | Jan,... |
%d | 日 | 31-Jan |
%A | 星期 | Sunday,... |
%a | 星期缩写 | Sun,... |
%H | 时(24时制) | 00-23 |
%I | 时(12时制) | 12-Jan |
%p | 上午/下午 | AM,PM |
%M | 分 | 00-59 |
%S | 秒 | 00-59 |