ime.days - (ime.days/7 +1)*2
基本是这样,也有例外。例如开始日是周6,吃好饭,再思考
-_________________-b

解决方案 »

  1.   

    但是还有问题,比如如果是周一到周二,按照上面的算法还是得到2,我想应该是
    (ime.days/7)*2 这是绝对周六日数量
    加上
    当前是星期几(对应1、2、3)+ime.days/7余数 ,如果大于等于6则加1,大于等于7加2
    就正好是是周六日的数目了。
    想到就文字描述了,没写成代码^_^
      

  2.   

    吃完饭写完了顺手贴上来
                               DateTime dt1 = Convert.ToDateTime(StartTime);
    DateTime dt2 = Convert.ToDateTime(EndTime);
    TimeSpan ts = dt2 - dt1;
    int a = ts.Days;
    int b = (a/7)*2;
    int c = DayOfWeek(dt1)+a%7;
    if(c>=6)
    b += 1;
    if(c=7)
    b += 2;
                      //e为去掉周六周日的天数
    int e = a - b;                   //取得当前星期几然后转换成数字
    private int DayOfWeek(DateTime dt)
    {
    int i = 0;
    string dow = dt.DayOfWeek.ToString();
    switch(dow)
    {
    case "Monday":
    i = 1;
    break;
    case "Tuesday":
    i = 2;
    break;
    case "Wednesday":
    i = 3;
    break;
    case "Thursday":
    i = 4;
    break;
    case "Friday":
    i = 5;
    break;
    case "Saturday":
    i = 6;
    break;
    case "Sunday":
    i = 7;
    break;
    }
    return i;
    }
      

  3.   

    private double Compute(
    DateTime beginDate,
    DateTime endDate)
    {
    TimeSpan interval = endDate - beginDate;
    int totalDayCounts = interval.Days + 1; double totalWeekCounts = Math.Floor(totalDayCounts / 7);
    double remainder = Math.Abs(Math.IEEERemainder(Convert.ToDouble(totalDayCounts),7));
    double offDayCount = totalWeekCounts * 2; int beginDateDayOfWeek = beginDate.DayOfWeek.GetHashCode();
    int endDateDayOfWeek = endDate.DayOfWeek.GetHashCode();
    if(remainder == 1)
    {
    if(beginDateDayOfWeek == 0 || beginDateDayOfWeek == 6)
    {
    offDayCount ++;
    }
    }
    if(remainder > 1)
    {
    if(beginDateDayOfWeek == 0 || endDateDayOfWeek == 6)
    {
    offDayCount ++;
    }
    else
    {
    offDayCount += 2;
    }
    }
    return offDayCount;
    }
      

  4.   

    调用系统函数 取得d1 ,d2 是星期几,
     (d2-d1)/7,整星期数
    其中包含的星期六,星期日天数d = (d2-d1)/7*2;
      (d2-d1)%7,不足一星期的天树
    if (d1的星期数+d2-d1)%7>7)
    {
        d+=2
    }
    else
    {
    if (d1的星期数+d2-d1)%7>6 )
    {
    d+=1;
    time = d2-d1 -d;}
    }
      

  5.   

    回复人: fb13579() ( ) 信誉:100 
    if(c>=6)
    b += 1;
    if(c=7)
    b += 2;
                      //e为去掉周六周日的天数C=7时,加了3天
      

  6.   

    效率最高的办法
    days = (d2 - d1).days; //总天数
    ws = days / 7  //整周数
    d = ws * 2;
    ls = days % 7 //剩下的天数
    if (ls > 0)
    {
      if ((int)d2.dayofweek == 6) d++; //剩下天数最后一天是周六,假日加一
      if ((int)d2.addday(-ls).dayofweek == 0) d++; //剩下天数第一天是周日,假日加一 
    }
      

  7.   

    to jimh(jimmy),你的算法错了。如:d1="2004-1-2",d2="2004-1-13"
      

  8.   

    这个算法是绝对正确的了~~~特此大家可以用了
    DateTime dtStartTime = Convert.ToDateTime(StartTime);
    DateTime dtEndTime = Convert.ToDateTime(EndTime);
    TimeSpan tsSumday = dtEndTime - dtStartTime;
    int iSumday =  tsSumday.Days;
    int iSumweekend = iSumday/7*2;
    int iEndTime = ChangeDayOfWeek(dtEndTime);//此处调用转换日期变成数字的函数在上面
    int iStartTime = ChangeDayOfWeek(dtStartTime);//此处调用转换日期变成数字的函数在上面
    if((iEndTime == 7 )&&( iSumday%7 != 0)&&(iStartTime != 7 ))
    {
       iSumweekend += 1;
    }
    if((iEndTime < iStartTime)&&( iSumday%7 != 0))
    {
       if(iStartTime == 7)
       {
          iSumweekend += 1;
       }
          else
       {
          iSumweekend += 2;
       }
    }
    int iSumWorkingDay = iSumday - iSumweekend;