你的问题可以通过Java提供的
java.util.Calendar
来解决。判断某天是星期几。不用自己想算法

解决方案 »

  1.   

    不行吧,我看过Calendar的,就是不知道具体怎么做了:)不可能一天一天判断啊,要想个好的算法才行!!
      

  2.   

    1,算出开始日期到结束日期的天数 n
    2,n/7 * 40 + 边界情况(<=6天)
      

  3.   

    import java.util.Calendar;public class CalendarTest { public static void main(String[] args) throws Exception { if (args.length != 6) {
    System.err.println("请给出年月日参数");
    return;
    } Calendar cal1 = Calendar.getInstance();
    cal1.set(Calendar.YEAR, Integer.parseInt(args[0]));
    cal1.set(Calendar.MONTH, Integer.parseInt(args[1]) - 1);
    cal1.set(Calendar.DATE, Integer.parseInt(args[2])); Calendar cal2 = Calendar.getInstance();
    cal2.set(Calendar.YEAR, Integer.parseInt(args[3]));
    cal2.set(Calendar.MONTH, Integer.parseInt(args[4]) - 1);
    cal2.set(Calendar.DATE, Integer.parseInt(args[5])); if (cal1.after(cal2)) {
    System.out.println("请确保开始日期小于结束日期");
    return;
    } long millsPerDay = 24 * 60 * 60 * 1000;
    int days = (int)((cal2.getTimeInMillis() - cal1.getTimeInMillis()) / millsPerDay) + 1;
    System.out.println("共有" + days + "天");
    int weeks = days / 7; Calendar tmp = (Calendar)cal1.clone(); int workDays = 0; for (int i = 0; i < days % 7; i ++) {

    int dayOfWeek = tmp.get(Calendar.DAY_OF_WEEK);
    tmp.add(Calendar.DATE, 1);
    if (dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY) continue;
    workDays ++;
    } workDays += weeks * 5; System.out.println("共有工作天数: " + workDays);
    }};
      

  4.   

    方案1: (计算总天数-休息日的天数) * 40 
      优点:算法简单
      缺点:时间复杂度大
    方案2: 计算总天数/7*40+边界情况(<=6)  优点:时间复杂度低
      确点:确定边界条件复杂方案3:
      1.计算总天数N
      2.起始日期beginDate是周几beginWeek
      3.结束日期endDate是周几endWeek
      4.if endDate-beginData+1>7 转到5
        否则转到6
      5.工作时间=N/7*40;
       boolean booNewWeek=false ; 
       for (i=endDate-6;i<endDate+1;i++) {
         if (turnWeek=beginWeek){booNewWeek = true;}
         if (booNewWeek){
           if turnWeek 非工作时间 工作时间+=40;
                       否则 continue
         }   
       }
      6.for (j=beginDate;j<endDate+1;j++)
        if turnDate(轮到的时间)  非休息日 工作时间+=40
                  否则 continue
      优点:时间复杂度和2相同
           比较和一相同-简单
      缺点:综合思维要求高
      

  5.   

    接宝地一用
    Date型怎么向后+1
    例如2004-10-1怎么得到2004-10-2
      

  6.   

    //time 是2004-10-1的日期类型。Calendar cal = Calendar.getInstance();
    cal.setTime(time);
    cal.add(Calendar.DATE, 1);return cal.getTime();
      

  7.   

    谢谢,各位帅哥:)昨天晚上我写了一个完成的测试用例,供参考和指正:)import java.util.Calendar;
    import java.util.Date;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;public class CalendarTest { public static void main(String[] args) throws Exception { if (args.length != 7) {
    System.err.println("请给出年月日参数");
    return;
    } Calendar cal1 = Calendar.getInstance();
    cal1.set(Calendar.YEAR, Integer.parseInt(args[0]));
    cal1.set(Calendar.MONTH, Integer.parseInt(args[1]) - 1);
    cal1.set(Calendar.DATE, Integer.parseInt(args[2])); Calendar cal2 = Calendar.getInstance();
    cal2.set(Calendar.YEAR, Integer.parseInt(args[3]));
    cal2.set(Calendar.MONTH, Integer.parseInt(args[4]) - 1);
    cal2.set(Calendar.DATE, Integer.parseInt(args[5])); CalendarTest test = new CalendarTest();
    test.getWorkDays(cal1, cal2);
    test.getFinishDay(cal1, Integer.parseInt(args[6]));
    }
    public int getWorkDays(Calendar startDay, Calendar finishDay) {
    int workDays = 0;
    long millsPerDay = 24 * 60 * 60 * 1000; int days = (int)(Math.ceil((finishDay.getTimeInMillis() - startDay.getTimeInMillis()) / (double)millsPerDay)) + 1;
    int weeks = days / 7;

    Calendar tmp = (Calendar)startDay.clone(); for (int i = 0; i < days % 7; i ++) {

    int dayOfWeek = tmp.get(Calendar.DAY_OF_WEEK);
    tmp.add(Calendar.DATE, 1);
    if (dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY) continue;
    workDays ++;
    } workDays += weeks * 5; System.out.println("共有" + days + "天");
    System.out.println("共有工作天数: " + workDays); return workDays;
    }
    public Calendar getFinishDay(Calendar startDay, int workDays) { int weeks = workDays / 5;
    int durationDays = 0; //持续的天数。 DateFormat df = new SimpleDateFormat("yyyy年MM月dd日"); Calendar tmp = (Calendar) startDay.clone(); if (workDays % 5 != 0) {

    int dayOfWeek = tmp.get(Calendar.DAY_OF_WEEK);

    while (dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY) {
    durationDays ++;
    System.out.println(df.format(tmp.getTime()) + "是休息日");
    tmp.add(Calendar.DAY_OF_MONTH, 1);
    dayOfWeek = tmp.get(Calendar.DAY_OF_WEEK);
    }

    durationDays += 1;
    } durationDays += weeks * 7; Calendar finishDay = (Calendar) startDay.clone();
    finishDay.add(Calendar.DAY_OF_MONTH, durationDays - 1);

    System.out.println("持续工作天数: " + durationDays);
    System.out.println("结束日期: " + df.format(finishDay.getTime()));  return finishDay;
    }
    };