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!

大功告成!

期待後期的學習可以完善更多的功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章