Description: This is a tool class for processing time. It will continue to accumulate and improve when encountering time processing problems during development.
# coding=utf-8
import datetime
import time
from dateutil.relativedelta import relativedelta
def second_to_time(second):
"""
把秒数转换为时间格式 17:33:24
:param second: 秒数
:return: str
"""
m, s = divmod(second, 60)
h, m = divmod(m, 60)
return "%02d:%02d:%02d" % (h, m, s)
def timedelta_to_second(timedelta):
"""
把两个datetime.datetime计算后的结果转换为秒数
:param timedelta: datetime.timedelta类型
:return: second int
"""
cur = str(timedelta).split()
if len(cur) == 3:
day = cur[0]
tmp = cur[2].split(":")
hour = tmp[0]
minute = tmp[1]
second = tmp[2]
elif len(cur) == 1:
day = 0
tmp = cur[0].split(":")
hour = tmp[0]
minute = tmp[1]
second = tmp[2]
else:
raise Exception("check param type is <class 'datetime.timedelta'>")
return int(datetime.timedelta(days=int(day), hours=int(hour), minutes=int(minute), seconds=int(second)).total_seconds())
def gmt_to_datetime(sdt):
"""
把字符串类型转换为datetime
:param sdt 字符串 Thu Apr 22 11:47:23 2021
:return: datetime.datetime
"""
ts = time.localtime(time.mktime(time.strptime(sdt, "%a %b %d %H:%M:%S %Y")))
return datetime.datetime(ts.tm_year, ts.tm_mon, ts.tm_mday, ts.tm_hour, ts.tm_min, ts.tm_sec)
def iso_to_datetime(sdt):
"""
把字符串类型转换为datetime.datetime类型
:param sdt: 字符串 2021-1-26T17:33:24Z, 2021-1-26T17:33:24, 2021-1-26 17:33:24
:return: datetime.datetime类型
"""
t_format = sdt.replace("T", " ").replace("Z", "")
return datetime.datetime.strptime(t_format, '%Y-%m-%d %H:%M:%S')
def utc_to_local(sdt):
"""
utc时间转换为本地时间
:param sdt: 字符串 2021-1-26T17:33:24Z, 2021-1-26T17:33:24, 2021-1-26 17:33:24
:return: 转换后的时间 datetime.datetime类型
"""
now = time.time()
local_time = datetime.datetime.fromtimestamp(now)
utc_time = datetime.datetime.utcfromtimestamp(now)
offset = local_time - utc_time
local = iso_to_datetime(sdt) + offset
return local
def local_to_utc(sdt):
"""
本地时间转换为utc时间
:param sdt: 字符串 2021-1-26T17:33:24Z, 2021-1-26T17:33:24, 2021-1-26 17:33:24
:return: 转换后的时间 datetime.datetime类型
"""
second = time.mktime(iso_to_datetime(sdt).timetuple())
utc = datetime.datetime.utcfromtimestamp(second)
return utc
def format_time(second):
"""
把时间戳格式化为 2021-1-26 17:33:24
:param second: int or float
:return: 格式化后的时间 str
"""
return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(second))
def datetime_add(dt, **kwargs):
"""
时间加法
:param dt: datetime.datetime类型
:param kwargs: dict 字段 second、minute、hour、day、month、year
return dt: 计算之后的时间 datetime.datetime类型
"""
dt += datetime.timedelta(seconds=kwargs.get("second", 0))
dt += datetime.timedelta(minutes=kwargs.get("minute", 0))
dt += datetime.timedelta(hours=kwargs.get("hour", 0))
dt += datetime.timedelta(days=kwargs.get("day", 0))
dt += relativedelta(months=kwargs.get("month", 0))
dt += relativedelta(years=kwargs.get("year", 0))
return dt
def datetime_cut(dt, **kwargs):
"""
时间减法
:param dt: datetime.datetime类型
:param kwargs: dict 字段 second、minute、hour、day、month、year
return dt: 计算之后的时间 datetime.datetime类型
"""
dt -= datetime.timedelta(seconds=kwargs.get("second", 0))
dt -= datetime.timedelta(minutes=kwargs.get("minute", 0))
dt -= datetime.timedelta(hours=kwargs.get("hour", 0))
dt -= datetime.timedelta(days=kwargs.get("day", 0))
dt -= relativedelta(months=kwargs.get("month", 0))
dt -= relativedelta(years=kwargs.get("year", 0))
return dt