前言
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())