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

2023-05-13  本文已影响0人  thirsd

零、背景

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

一、处理方案

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

二、处理代码

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年之后。
上一篇 下一篇

猜你喜欢

热点阅读