pytest_ui_api_fw/common/util/handle_datetime.py

187 lines
8.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/python3
# -*- coding: UTF-8 -*-
# 设置utf-8 显示中文
"""
@Author: guo
@Filehandle_datetime.py
"""
from datetime import date
from datetime import datetime
import time
class HandleDateTime:
def __init__(self):
# 到天的时间格式
self.__d_format = "%Y-%m-%d"
# 到小时的时间格式
self.__h_format = "%Y-%m-%d %H"
# 到分钟的时间格式
self.__m_format = "%Y-%m-%d %H:%M"
# 到秒的时间格式
self.__s_format = "%Y-%m-%d %H:%M:%S"
def get_cur_date(self) -> str:
"""
获取当前客户端的日期,格式为 2017-01-01 \n
:return: 当前日期
"""
# curdate = time.strftime("%Y-%m-%d")
# return curdate
curdate = date.strftime(datetime.now(), self.__d_format)
return curdate
def get_cur_time(self) -> str:
'''
获取当前客户端的时间,格式为 2019-08-09 23:33:20 \n
:return: 当前时间,时间格式为"%Y-%m-%d %H:%M:%S" 如2019-08-09 23:33:20
'''
curtime = datetime.strftime(datetime.now(), self.__s_format)
return curtime
def get_curtime_to_hh(self) -> str:
"""
获取当前客户端时间到小时不包括分钟和秒格式为2018-01-01 13 \n
:return: 不包括分钟和秒的当前客户端时间24小时制
"""
# curtime = time.strftime("%Y-%m-%d %H")
# return curtime
curtime = datetime.strftime(datetime.now(), self.__h_format)
return curtime
def get_curtime_to_mm(self) -> str:
"""
获取当前客户端的时间,到分钟不包含秒格式为2018-01-01 13:10 \n
:return: 不包含秒的当前客户端时间24小时制
"""
# curtime = time.strftime("%Y-%m-%d %H:%M")
# return curtime
curtime = datetime.strftime(datetime.now(), self.__m_format)
return curtime
def get_curtime_to_ss(self) -> str:
"""
获取当前客户端的时间到秒包含秒格式为2018-01-01 13:10:10 \n
:return: 包含秒的当前客户端时间24小时制
"""
# curtime = time.strftime("%Y-%m-%d %H:%M:%S")
# return curtime
curtime = datetime.strftime(datetime.now(), self.__s_format)
return curtime
def str_to_time(self, strtime: str):
"""
将传入的时间字符串格式化为对应的时间对象,最后返回的格式为%Y-%m-%d %H:%M:%S
2017-01-09 12:30:40 \n
:param strtime: 时间字符串
:return: 格式化为%Y-%m-%d %H:%M:%S(2018-01-05 21:13)的时间对象
"""
# 到秒钟的格式 2018-01-01 12:30:30
if strtime.count(":") == 2 and strtime.count("-") == 2:
Otime = datetime.strptime(strtime, self.__s_format)
# 到分钟的格式 2018-01-01 12:30
elif strtime.count("-") == 2 and strtime.count(":") == 1:
Otime = datetime.strptime(strtime, self.__m_format)
# 到小时的格式 2018-01-01 18
elif strtime.count("-") == 2 and strtime.count(":") == 0 and strtime.count(" ") == 1:
Otime = datetime.strptime(strtime, self.__h_format)
# 到日期的格式 2018-01-01
elif strtime.count("-") == 2 and strtime.count(":") == 0:
Otime = datetime.strptime(strtime, self.__d_format)
return Otime
def __timedelta(self, starttime: str, endtime: str):
"""
私有方法,仅内部使用。主要是为后面求取两时间间隔时,
将时间字符串转化为时间对象后,对两个时间进行大小判断,同时进行相减 \n
:param starttime:
:param endtime:
:return:
"""
if starttime <= endtime:
timedelta = (endtime - starttime)
else:
timedelta = (starttime - endtime)
return timedelta
def time_delta_ss(self, starttime: str, endtime: str) -> int:
"""
计算两个时间之间的相差多少秒返回的值为int类型
在进行计算之前,先要判断传入的是到小时,还是到分钟,或者是到秒,
然后再将传入的参数进行对应的时间类型转换。 \n
:param starttime: 要比较的开始时间
:param endtime: 要比较的结束时间
:return: 返回两个时间的差值结果为秒为int类型
"""
# 进行比较之前,先进行格式转换,转换为时间对象
start_time = self.str_to_time(starttime)
end_time = self.str_to_time(endtime)
# 调用私有方法,进行时间大小判断
timedelta = self.__timedelta(start_time, end_time)
# 这里必须使用total_seconds()方法否则当秒数超过60后就会向前进一即转为成分钟
# 即总共是80秒如果使用seconds()方法,返回的值 则为20如果使用total_seconds()则是80
return int(timedelta.total_seconds())
def time_delta_mm(self, starttime: str, endtime: str) -> int:
"""
计算两个时间之间相差多少分钟返回的值为int类型。
在进行计算之前,先要判断传入的时间 是到小时,还是到分钟,还是到秒钟,
然后再将传入按照匹配的时间类型进行转换。 \n
:param starttime: 要比较的开始时间
:param endtime: 要比较的结束时间
:return: 返回两个时间的差值结果为分钟为int类型
"""
# 在进行比较之前,先进行格式转换,将其转换为时间对象
start_time = self.str_to_time(starttime)
end_time = self.str_to_time(endtime)
# 调用私有方法,进行时间大小判断,并返回相应的时间差
timedelta = self.__timedelta(start_time, end_time)
return int(timedelta.total_seconds() // 60)
def time_delta_hh(self, starttime: str, endtime: str) -> int:
"""
计算两个时间之间相差多少小时返回的值为int类型。
在进行计算之前,先要判断传入的时间 是到小时,还是到分钟,还是到秒钟,
然后再将传入按照匹配的时间类型进行转换。 \n
:param starttime: 要比较的开始时间
:param endtime: 要比较的结束时间
:return: 返回两个时间的差值结果为小时为int类型
"""
# 在进行比较之前,先进行格式转换,将其转换为时间对象
start_time = self.str_to_time(starttime)
end_time = self.str_to_time(endtime)
# 调用私有方法,进行时间大小判断,并返回相应的时间差
timedelta = self.__timedelta(start_time, end_time)
# return ((timedelta.seconds) // (60 * 60))
return int(timedelta.total_seconds() // (60 * 60))
def time_delta_days(self, starttime: str, endtime: str) -> int:
"""
计算两个时间之间相差多少天返回的值为int类型。 \n
:param starttime: 要比较的开始时间
:param endtime: 要比较的结束时间
:return: 返回两人时间的差值结果为天数为int类型
"""
# 在进行比较之前,先进行格式转换,将其转换为时间对象
start_time = self.str_to_time(starttime)
end_time = self.str_to_time(endtime)
# 调用私有方法,进行时间大小判断,并返回相应的时间差
timedelta = self.__timedelta(start_time, end_time)
# return ((timedelta.seconds) // (60 * 60))
return timedelta.days
def timestamp_to_time(self, timestamp) -> str:
"""
将时间时间戳转为时间, 转化格式为 "%Y-%m-%d %H:%M:%S" \n
:param timestamp: 时间戳
:return: str 类型,转化的时间 如: 2020-01-01 09:30:30
"""
return time.strftime(self.__s_format, time.localtime(timestamp))
if __name__ == '__main__':
htime = HandleDateTime()
start = '2020-10-1 10:10:20'
end = '2020-10-1 10:10:30'
data = htime.time_delta_days(start,end)
print(data)