Work-如何对时间类型的数据进行加减操作

1 篇文章 0 订阅
1 篇文章 0 订阅

引言:
今天在工作上接到一个任务,需要使用C#编写一个接口用于计算特定时间内的压力合格率,该功能逻辑为
1根据传入的参数,找到对应的压力站点
2根据压力站点找到对应的传感器
3根据传感器找到对应的报警历史和传感器个数
4根据报警历史(AlertstartTime和AlertendTime)得到我们所报警的时间总和
5在利用我们传入的EndTime减去StartTime,得到我们规定的时间总和并乘以传感器个数,使用报警时间总和除以该总和就可以得到我们所需要的合格率,并以保留两位小数的方式输出
以上就是该逻辑,
首先是完成了数据库的查询,查询比较简单,就是join 连接表进行查询即可
重点是如何对时间类型的值进行减法,并得到总时间(我是以分为单位)
这里是已得到了数据库的查询结果,接下来对结果进行操作

int num=0;
string temp="";
for (int i = 0; i < dt.Rows.Count; i++)
            {   //得到对应的报警时间总和
                allalerttime += (dt.Rows[i]["ends"].ToDateTime()- dt.Rows[i]["start"].ToDateTime()).TotalMinutes;
               //得到对应的传感器个数
               if(temp!=dt.Rows[i]["id"].toString()){
               temp=dt.Rows[i]["id"].toString();
               num++;
               }
                       
            }

可以看到,我是调用了ToDateTime()将该类型转换为时间类型,接着进行减法操作,最后调用TotalMinutes方法,将该时间值转换为分钟显示出来。
这样我们便可以得到我们所有的报警时间总和了
接下来就要对我们传入的参数进行操作

double alltimes=(endTime.ToDateTime()-startTime.ToDateTime()).TotalMinutes;

这样便得到了我们的报警时间总合和我们规定的时间总合
接下来定义一个double类型的参数来接收结果

double calculate=Math.Round(((allalerttime / alltimes) + (allalerttime % alltimes)), 2, MidpointRounding.AwayFromZero)
这里说一下这个方法,有三个参数
1我们所要进行操作的数值
2我们想要保留的小数位
3指定舍入的规则

这样就完成对时间类型数据的操作!!!
最后贴一个数据SQL,有兴趣的可以看看:

select ahis.StartTime as start,ahis.EndTime as ends,sen.ID as id
            from SCADA_Station sta 
            left join SCADA_StationType staty on sta.StationTypeID = staty.ID
            left join SCADA_Sensor sen  on sen.StationID = sta.ID
            left join SCADA_AlertHistory ahis on ahis.SensorID = sen.ID
            left join SCADA_AlertValue ave on ave.AlertID = ahis.ID
            where (Feedback is null or Feedback != '报警方案变更') and IsNull(ave.是否删除,0)!= 1 
            and staty.Name='{stationTypeName}' and sen.Name='{sensorTypeName}' and ahis.StartTime>'{dateFrom}' and ahis.EndTime<'{dateTo}'
            order by id,start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值