零、背景
在工作中,经常需要分析处理的时间问题,除了耗时,还需要分析时间节点。例如,某个操作一般在什么时候完成的。
一、处理方案
第一步,将时间转化为数字;
第二步,将数字取需要的范围或者中位数;
第三步,将所取数字还原为字符串格式;
二、处理代码
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年之后。
网友评论