前言
在开发中,我们少不了与时间打交道
打印日志log,获取函数运行时间,在web开发中写入时间……
在Python中,有time和datetime库,为我们提供了便利
import time
import datetime
我们可以:
# 时间戳
print(time.time())
# 格式化时间戳
print(time.localtime(time.time()))
# 美观显示
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))
print(datetime.datetime.now().strftime('%Y-%m-%d'))
out:
1583856023.0182905
time.struct_time(tm_year=2020, tm_mon=3, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=23, tm_wday=2, tm_yday=71, tm_isdst=0)
2020-03-11 00:00:23
2020-03-11
可以看出提供了丰富的功能,当然还可以字符串转时间戳等等强大功能,但是代码的形式对于我这个菜鸟来说有点长(记不住……),时间戳又不适合直观显示,所以,可不可以定制一个自己想要的亚子呢。。脑子一热……
动手
win32api
库提供了window上的api,其中GetLocalTime
可以获取本机系统的时间(有时候也是弊端)
import win32api
win32api.GetLocalTime()
out:#元组
(2020, 3, 3, 11, 0, 17, 32, 305)
返回的是一个元组
在日常中我想得到一个 1970-01-01 12:00样式的时间:
def getnow():
'''
年-月-日 时:分:秒
'''
nowtime=win32api.GetLocalTime()
nowtime='{}-{}-{} {}:{}:{}'.format(
nowtime[0],
'0'+str(nowtime[1]) if nowtime[1]<10 else nowtime[1],
nowtime[3],
'0'+str(nowtime[4]) if nowtime[4]<10 else nowtime[4],
'0'+str(nowtime[5]) if nowtime[5]<10 else nowtime[5],
'0'+str(nowtime[6]) if nowtime[6]<10 else nowtime[6])
return nowtime
out:
2020-03-11 00:08:26
不错,是我喜欢的样子
这已经满足日常需求
但是我还想分别获取年月日时分秒毫秒
还得完善:
def getoftime():
'''
now={'year':'','month':'','week':'','day':'','hour':'','min':'','second':'','millisecond':''}
'''
nowtime=win32api.GetLocalTime()
now={}
for i in range(len(nowtime)):
now[i]=nowtime[i]
return now
out:
{0: 2020, 1: 3, 2: 3, 3: 11, 4: 0, 5: 8, 6: 26, 7: 168}
利用字典返回所有信息,这样我就可以随意获取年月日时分秒毫秒啦
通过time模块集成为装饰器来完成更多功能
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
' a DIY module '
__author__='Liubingzhe'
__version__='v1.0.0'
__help__={'年-月-日 时:分:秒':'getnow',
'时间字典':'getoftime',
'运行时间':'@runtime',
'CPU时间':'@cputime',
'消费时间':'@taketime'}
import win32api,time
def getnow():
'''
年-月-日 时:分:秒
'''
nowtime=win32api.GetLocalTime()
nowtime='{}-{}-{} {}:{}:{}'.format(
nowtime[0],
'0'+str(nowtime[1]) if nowtime[1]<10 else nowtime[1],
nowtime[3],
'0'+str(nowtime[4]) if nowtime[4]<10 else nowtime[4],
'0'+str(nowtime[5]) if nowtime[5]<10 else nowtime[5],
'0'+str(nowtime[6]) if nowtime[6]<10 else nowtime[6])
return nowtime
def getoftime():
tdict={'year':'','month':'','week':'','day':'','hour':'','min':'','second':'','millisecond':''}
now=win32api.GetLocalTime()
everytime={i:j for i,j in zip(tdict,now)}
return everytime
def runtime(func):
'''记录函数运行的开始时间和结束时间'''
def wrapper(*args, **kw):
print('call %s()' % func.__name__)
start=getnow()
func(*args, **kw)
end=getnow()
return f'Start:{start} end:{end}'
return wrapper
def cputime(func):
'''CPU运行时间'''
def wrapper(*args, **kw):
print('call %s()' % func.__name__)
start=time.clock()
func(*args, **kw)
end=time.clock()
return f'CPU takes {end-start}s'
return wrapper
def taketime(func):
'''程序运行花费时间'''
def wrapper(*args, **kw):
print('call %s()' % func.__name__)
start=time.time()
func(*args, **kw)
end=time.time()
return f'It takes {int(end-start)}s.'
return wrapper
将代码保存到python搜索路径 D:\anaconda\Lib\site-packages\newtime\newtime.py
试一试
OK!
大功告成!
期待后期的学习可以完善更多的功能