这个函数还能有更好的实现吗?

call_from_dream call_from_dream 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
小弟刚写了一个函数,是求两个日期之间,除去周末后,剩余天数的。我用的是比较笨的方法,按起始日期从周一到周日,分为7类,然后每一类里,结束日期按照星期又分成几类,然后一 一实现功能。写完后,感觉算法上写的不是太好。不知道各位大神还有没有好的思路可以更好的实现这个功能?
PS:一开始是用swich-case 语句实现的,功能实现后,发现return 变量时,报错,说return的local变量未赋值。小弟我只好用if-else语句重写了这个功能。
static int workdaysCalculate(DateTime beginTime, DateTime endTime)
{
byte bt = (byte)(beginTime.DayOfWeek);
byte et = (byte)(endTime.DayOfWeek);
int spanDays = endTime.Subtract(beginTime).Days;
int workDays;

if (6 == bt)
{
if (6 == et)
{
workDays = spanDays * 5 / 7;
}
else if (0 == et)
{
workDays = (spanDays - 1) * 5 / 7;
}
else
{
workDays = (spanDays - et - 1) * 5 / 7 + et - 1;
}
}
else if (0 == bt)
{
if (0 == et)
{
workDays = (spanDays - et) * 5 / 7;
}
else
{
workDays = (spanDays - et) * 5 / 7 + et - 1;
}
}
else if (1 == bt)
{
if (0 == et)
{
workDays = (spanDays - 6) * 5 / 7 + 5;
}
else
{
workDays = (spanDays - et + 1) * 5 / 7 + et - 1;
}
}
else if (2 == bt)
{
if ((0 == et) || (1 == et))
{
workDays = (spanDays - 5 - et) * 5 / 7 + 4;
}
{
workDays = (spanDays - et + 2) * 5 / 7 + et - 2;
}
}
else if (3 == bt)
{
if (0 == et)
{
workDays = (spanDays - 4) * 5 / 7 + 3;
}
else if ((1== et)||(2==et))
{
workDays = (spanDays - et - 4) * 5 / 7 + et + 2;
}else
{
workDays = (spanDays - et + 3) * 5 / 7 + et - 3;
}
}
else if (4 == bt)
{
if (0 == et)
{
workDays = (spanDays - 3) * 5 / 7 + 2;
}
else if ((4 == et) || (5 == et) || (6 == et))
{
workDays = (spanDays - et + 4) * 5 / 7 + et - 4;
}
else
{
workDays = (spanDays - et - 3) * 5 / 7 + et + 1;
}
}
else
{
if (0 == et)
{
workDays = (spanDays - 2) * 5 / 7 + 1;
}
else if ((5 == et) || (6 == et))
{
workDays = (spanDays - et + 5) * 5 / 7 + et - 5;
}
else
{
workDays = (spanDays - et - 2) * 5 / 7 + et;
}
}

/*
switch (bt)
{
//When begin day is Saturday
case 6:
switch (et)
{
case 6:
workDays = spanDays * 5 / 7;
break;
case 0:
workDays = (spanDays - 1) * 5 / 7;
break;
case 1:
case 2:
case 3:
case 4:
case 5:
workDays = (spanDays-et-1) * 5 / 7 + et-1;
break;
}
break;
//When begin day is Sunday.
case 0:
switch (et)
{
case 0:
workDays = (spanDays - et) * 5 / 7;
break;
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
workDays = (spanDays - et) * 5 / 7 + et - 1;
break;
}

break;

case 1:
switch (et)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
workDays = (spanDays - et + 1) * 5 / 7 + et - 1;
break;
case 0:
workDays = (spanDays-6) * 5 / 7 + 5;
break;
}
break;

case 2:
switch (et)
{
case 2:
case 3:
case 4:
case 5:
case 6:
workDays = (spanDays - et + 2) * 5 / 7 + et - 2;
break;
case 0:
case 1:
workDays = (spanDays - 5 - et) * 5 / 7 + 4;
break;
}
break;

case 3:
switch (et)
{
case 3:
case 4:
case 5:
case 6:
workDays = (spanDays - et + 3) * 5 / 7 + et - 3;
break;
case 0:
workDays = (spanDays - 4) * 5 / 7 + 3;
break;
case 1:
case 2:
workDays = (spanDays - et - 4) * 5 / 7 + et + 2;
break;
}
break;

case 4:
switch (et)
{
case 4:
case 5:
case 6:
workDays = (spanDays - et + 4) * 5 / 7 + et - 4;
break;
case 0:
workDays = (spanDays - 3) * 5 / 7 + 2;
break;
case 1:
case 2:
case 3:
workDays = (spanDays - et - 3) * 5 / 7 + et + 1;
break;
}
break;

case 5:
switch (et)
{
case 5:
case 6:
workDays = (spanDays - et + 5) * 5 / 7 + et - 5;
break;
case 0:
workDays = (spanDays - 2) * 5 / 7 + 1;
break;
case 1:
case 2:
case 3:
case 4:
workDays = (spanDays - et - 2) * 5 / 7 + et;
break;
}
break;
}
*/
return workDays;

}
...全文

相关推荐

《模式识别与数据挖掘》配套PPT课件

《模式识别与数据挖掘》配套PPT课件

Bryan Ding

科技成果转化项目进场交易前,评估备案环节需要准备哪些材料?_8.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN

人工智能通识教育(中职版)课程标准+PPT课件+部分素材+电子活页+在线考核

人工智能通识教育(中职版)课程标准+PPT课件+部分素材+电子活页+在线考核

Bryan Ding

跨境电商供应链管理(AIGC版)课件+教案+参考答案

跨境电商供应链管理(AIGC版)课件+教案+参考答案

Bryan Ding

110KV单电源电网三段式电流保护+距离继电保护整定计算说明报告(23页+6000字)

内容概要:本文是一份关于110kV单电源电网继电保护整定计算的综合性技术报告,全文共23页、约6000字,系统阐述了三段式电流保护与距离保护的设计原理及其整定计算方法。报告深入分析了电力系统在短路故障条件下的电流与阻抗特性,详细推导了电流保护Ⅰ、Ⅱ、Ⅲ段的动作范围、整定原则、灵敏度校验及时间配合机制,确保满足继电保护的选择性、速动性、灵敏性和可靠性“四性”要求。同时,针对长距离或重要输电线路,补充介绍了距离保护的阻抗整定计算方法,并可能结合Matlab进行仿真验证与辅助计算,提升整定结果的准确性与工程实用性。; 适合人群:适用于电气工程及其自动化相关专业的高年级本科生、研究生,以及从事电力系统继电保护设计、运行维护的工程技术人员;要求读者具备电力系统分析、短路计算及继电保护的基础理论知识。; 使用场景及目标:①掌握110kV单电源辐射型电网中三段式电流保护的整定流程与实际计算步骤;②理解距离保护的工作原理及其在复杂工况下的应用优势;③完成实际工程项目的保护配置与整定计算任务,或作为课程设计、毕业设计及科研课题的技术参考资料;④结合Matlab工具实现整定计算的程序化处理与动作特性仿真验证。; 阅读建议:建议读者结合《电力系统继电保护原理》等相关教材同步学习,重点研读整定公式的推导过程与典型算例的计算细节,注意区分电流保护与距离保护的适用场景与配置逻辑,有条件时应利用Matlab等工具对保护动作行为进行建模与仿真,以深化对保护协调配合机制的理解。

欢多天天写代码
评论 2
收藏 已收藏
分享
返回顶部