Python:动手去创建一个私人定制化时间库

前言

在开发中,我们少不了与时间打交道
打印日志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!

大功告成!

期待后期的学习可以完善更多的功能

发布了71 篇原创文章 · 获赞 204 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_44198436/article/details/104787277