各位大侠:我现在遇到一个计算时间段的问题,大概是这样的:
给出一个时间段,要计算这个时间段的有效时间。怎么样有效呢?要在08:00-12:00 和14:00-17:30这个时间段内才有效!比如07:00-13:10这个时间段的有效时间是4个小时。
现在请问大家有没有比较方便的方法计算出来啊?我问了几个人都说只能一种种情况判断,唉,那样的话要好多判断哦。

解决方案 »

  1.   

    没大看懂
    使用TimeSpan类?
      

  2.   

    timespan 是时间段好像没有这样的方法啊。说的简单些就是计算给定的时间段与08:00-12:00 和14:00-17:30 这俩个时间段的交集的时间。不知道有没有方便的方法
      

  3.   

    if(sdate.Date==edate.Date)
    {
    //考虑时间是否有用:
    //都早于八点,不考虑
    if(DateTime.Compare(sdate,sdate.Date.AddHours(8))<0&&DateTime.Compare(edate,edate.Date.AddHours(8))<0)
    {;}
    //都晚于17.5 ,不考虑
    else if(DateTime.Compare(sdate,sdate.Date.AddHours(17.5))>0&&DateTime.Compare(edate,edate.Date.AddHours(17.5))>0)
    {;}
    //晚于12 ,早于下午俩点,不考虑
    else if(DateTime.Compare(sdate,sdate.Date.AddHours(12))>0&&DateTime.Compare(edate,edate.Date.AddHours(14))<0)
    {;}
    //结束时间早于开始时间不考虑
    else if(DateTime.Compare(edate,sdate)<0)//结束时间小于开始时间。
    {;}
    else
    {
    if(DateTime.Compare(sdate,sdate.Date.AddHours(8))>0)
    {
    s=sdate;
    }
    else
    s=sdate.Date.AddHours(8);
    e=((DateTime.Compare(edate,edate.Date.AddHours(12))>0) ?edate.Date.AddHours(12):edate); ts=(DateTime.Compare(e,s)>0)?(TimeSpan)e.Subtract(s):new TimeSpan(0,0,0);//计算与上午工作时间交叉的部分
    Response.Write(i+":小时"+ts.Hours+"--分钟"+ts.Minutes);
    s=((DateTime.Compare(sdate,sdate.Date.AddHours(14))>0) ? sdate:sdate.Date.AddHours(14));
    e=((DateTime.Compare(edate,edate.Date.AddHours(17.5))>0) ?edate.Date.AddHours(17.5):edate);

    ts=(DateTime.Compare(e,s)>0)?(TimeSpan)e.Subtract(s):new TimeSpan(0,0,0);//计算与上午工作时间交叉的部分
    Response.Write("      小时"+ts.Hours+"--分钟"+ts.Minutes+"<br>");
    }
    }自己结贴了
      

  4.   

    http://topic.csdn.net/t/20050301/16/3815720.html启发来自上面的贴子,还是谢谢大家! 怎么结贴啊,晕