零、背景
在工作中,經(jīng)常需要分析處理的時間問題,除了耗時,還需要分析時間節(jié)點。例如,某個操作一般在什么時候完成的。
一、處理方案
第一步,將時間轉(zhuǎn)化為數(shù)字;
第二步,將數(shù)字取需要的范圍或者中位數(shù);
第三步,將所取數(shù)字還原為字符串格式;
二、處理代碼
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服務器中,對于時間數(shù)字,通常該數(shù)值會被限制在 1970 年至 2038 年之間。當默認僅使用時間格式是,默認為1900年,導致轉(zhuǎn)化時報錯。
處理方式:
將默認的時間轉(zhuǎn)化至2000年之后。