python--时间模块time

前言

python中有关时间的内容,时间主要是3种形式:格式化的时间、时间元组、时间戳,格式化的时间转为时间戳,必须要先转为时间元组,通过时间元组再转化为时间戳,同样的时间戳转化为格式化的时间时,也需要先转为时间元组后,才能再转化为格式化的时间

一、常用方法说明

1、time.time()
以时间戳的形式获取当前时间

2、time.localtime()
以时间元组的形式获取当前时间
将时间戳转化为时间元组

3、time.mktime()
将时间元组转化为时间戳

4、time.strftime()
将时间元组按指定的格式输出时间字符串
当不传时间元组时,按指定格式获取当前时间

5、time.strptime()
将格式化的时间字符串转化为时间元组

二、常用方法封装

实现方法:
1、格式化时间转为时间戳
2、时间戳按指定的格式输出时间字符串
3、计算某时间点前的时间
4、计算某时间点后的时间

import time
from setting.config import logger

class MyTimes():

    def str_to_timestamp(self,str=None, format='%Y-%m-%d %H:%M:%S'):
        '''
        格式化的时间转时间戳
        :param str: 格式化的时间,不传的时候取当前时间
        :param format: 时间格式化的格式,不传的时候,取默认的格式
        :return: 返回时间戳
        '''
        if str:
            time_tuple = time.strptime(str, format)
            result = time.mktime(time_tuple)
        else:
            result = time.time()
        return int(result)

    def timestamp_to_str(self,timezone=None, format='%Y-%m-%d %H:%M:%S'):
        '''
        时间戳按照指定的格式输出
        :param timezone: 时间戳,不传的时候,默认取当前时间
        :param format: 时间格式化的格式,不传的时候,取默认的格式
        :return: 返回的是指定格式的时间
        '''
        if timezone:
            time_tuple = time.localtime(timezone)
            result = time.strftime(format, time_tuple)
        else:
            result = time.strftime(format)
        return result

    def before_time(self,start_time =None, unit = 'd', num = 1,format = "%Y-%m-%d %H:%M:%S"):
        '''
        该函数主要用于计算之前的时间
        :param start_time:需要计算的参考时间
        :param unit:需要计算的单位,w:按周算  d:按天算   h:按小时算 m:按分钟算  s:按秒算
        :param num:计算相对时间的量值,两周还是三周
        :param format:指定输入和输出的时间格式,有默认的格式
        :return:返回计算好的时间
        '''
        if not start_time:
            start_time = time.localtime()       # 以时间元组的形式获取当前时间
            # start_time = time.time()           # 以时间戳的形式获取当前时间
            logger.debug(start_time)
        return self.count_time(start_time,'before',unit=unit,num=num,format=format)

    def after_time(self,start_time =None, unit = 'd', num = 1,format = "%Y-%m-%d %H:%M:%S"):
        '''
        该函数主要用于计算之后的时间
        :param start_time:需要计算的参考时间
        :param unit:需要计算的单位,w:按周算  d:按天算   h:按小时算 m:按分钟算  s:按秒算
        :param num:计算相对时间的量值,两周还是三周
        :param format:指定输入和输出的时间格式,有默认的格式
        :return:返回计算好的时间
        '''

        if not start_time:
            start_time = time.localtime()
        return self.count_time(start_time,'after',unit=unit,num=num,format=format)

    def count_time(self,start_time,tag,unit = 'd', num =1,format="%Y-%m-%d %H:%M:%S"):
        '''
        主要是根据tag来判断是加还是减
        '''
        timetemp = int(time.mktime(start_time))        # 将时间元组转为时间戳
        if tag == 'before':
            t = self.count_timetemp(timetemp, '+', unit=unit, num=num)
        else :
            t = self.count_timetemp(timetemp, '-', unit=unit, num=num)
        timeArry = time.localtime(t)                 # 将时间戳转为时间元组
        result = time.strftime(format,timeArry)      # 将时间元组按照指定格式输出
        return result


    def count_timetemp(self, timetemp, symbol, unit='d', num=1):
        '''
        实际的计算过程
        '''
        if unit == 'y':
            t = eval('%d %s %d*365*24*60*60'%(timetemp,symbol, num))
        elif unit == 'M':
            t = eval('%d %s %d*30*24*60*60' % (timetemp, symbol, num))
        elif unit == 'w':
            t = eval('%d %s %d*7*24*60*60' % (timetemp, symbol, num))
        elif unit == 'd':
            t = eval('%d %s %d*24*60*60' % (timetemp, symbol, num))
        elif unit == 'h':
            t = eval('%d %s %d*60*60' % (timetemp, symbol, num))
        elif unit == 'm':
            t = eval('%d %s %d*60' % (timetemp, symbol, num))
        elif unit == 's':
            t = eval('%d %s %d*1' % (timetemp, symbol, num))
        else:
            logger.info('您输入的计算单位%s不存在'%unit)
        return t


if __name__ == '__main__':
    s = MyTimes()
    print(s.before_time(num = 6,unit='y'))
    # print(s.get_current_time())







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值