美文网首页
对时间进行取中位数、平均值

对时间进行取中位数、平均值

作者: thirsd | 来源:发表于2023-05-13 12:36 被阅读0次

    零、背景

    在工作中,经常需要分析处理的时间问题,除了耗时,还需要分析时间节点。例如,某个操作一般在什么时候完成的。

    一、处理方案

    第一步,将时间转化为数字;
    第二步,将数字取需要的范围或者中位数;
    第三步,将所取数字还原为字符串格式;

    二、处理代码

    from datetime import datetime, timedelta
    time_list = ["09:30", "09:20", "09:21", "09:22", "09:20", "09:21", "09:22", "09:28"]
    
    def get_median(ldata):
        sort_data = sorted(ldata)
        half = len(ldata)//2
        return (sort_data[half] + sort_data[-half]) / 2
    
    def trans_stime_to_num(time_str, time_format):
        return (datetime.strptime(time_str, time_format) - datetime(2000, 1, 1)).seconds
    
    def trans_num_to_stime(num, time_format):
        return (datetime(2000, 1, 1) + timedelta(seconds=num)).strftime(time_format)
    
    time_nums = [trans_stime_to_num(t, "%H:%M") for t in time_list]
    
    print(trans_num_to_stime(get_median(time_nums), "%H:%M"))
    

    三、需要注意的问题

    1、python datetime 报错OSError: [Errno 22] Invalid argument
    在windows服务器中,对于时间数字,通常该数值会被限制在 1970 年至 2038 年之间。当默认仅使用时间格式是,默认为1900年,导致转化时报错。
    处理方式:

    将默认的时间转化至2000年之后。
    

    相关文章

      网友评论

          本文标题:对时间进行取中位数、平均值

          本文链接:https://www.haomeiwen.com/subject/xzoysdtx.html