A tool for processing time in python

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

Guess you like

Origin blog.csdn.net/xiaoxin_OK/article/details/116143564