我这段代码是要返回是否是周六、周日的代码,运行没有问题,但是判断的不对呢,4月1日命名是周日,但是返回来的值是周一!!为什么呢!!
package compara_time;
import java.text.*;
import java.util.Date;
import java.util.Calendar;
//import java.util.Set;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2007</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */public class Compara_Time {
  private String v_btime;
  private String v_etime;
  public Compara_Time() {
  }
  public void setTime(String a,String b){//初始化时间
   v_btime=a;
   v_etime=b;
  }
  public String Compara_Result(String begin,String end) throws Exception{
    String result="0";
    SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String beginTime=begin; //指定一个字符串
    String endTime=end; //指定一个字符串
    String begin_work="";
    String end_work="";
    int day=0;
    int day1=0;
    //取日期是否是周末
    Calendar ca = Calendar.getInstance();
    SimpleDateFormat   df = new SimpleDateFormat("yyyy-mm-dd");
  try{
    System.out.print(beginTime+"beginTime");
    if ( beginTime.equals("") || beginTime==null){
       result ="00";
    }
    else{
       Date   dt1= df.parse(beginTime);
       ca.setTime(dt1);
       day  = ca.get(ca.DAY_OF_WEEK);
       System.out.print(day+"day");
       if(day == ca.SUNDAY || day == ca.SATURDAY){     //周六周日
          result = "100";
       }
       else{
         begin_work = beginTime.substring(0, 11) + v_btime;//"8:40:00";//时间在8:40前
         if (bartDateFormat.parse(begin_work).getTime() >=
             bartDateFormat.parse(beginTime).getTime()) {
            result = result + "1";
          }
          else {
             result = result + "0";
          }       }
    }
    if(endTime.equals("") || endTime==null){
      if(!result.equals("100")){//周六周日
        result =result+"0";
      }
    }else
    {
      ca.clear();
      Date   dt2= df.parse(endTime);
      ca.setTime(dt2);
      day1 = ca.get(ca.DAY_OF_WEEK);
      if(!result.equals("100"))
      {
        end_work=endTime.substring(0,11)+v_etime;//"17:15:00";//时间在17:15后
        if (bartDateFormat.parse(end_work).getTime() <=
        bartDateFormat.parse(endTime).getTime()) {
          result = result + "1";
        }
        else {
           result = result + "0";
       }
      }
    }     return result;
    }catch(Exception e)
    {System.out.println("Compara_Result():" + e.getMessage());return "";}
  }
}

解决方案 »

  1.   

    public final static int SUNDAY = 1;
    public final static int MONDAY = 2;
    public final static int TUESDAY = 3;
    public final static int WEDNESDAY = 4;
    public final static int THURSDAY = 5;
    public final static int FRIDAY = 6;
    public final static int SATURDAY = 7;
      

  2.   

    day  = ca.get(ca.DAY_OF_WEEK);
    改成:
    day  = ca.get(ca.DAY_OF_WEEK)-1;
      

  3.   

    谢谢 frilly(秋◆水) ,改完之后确实灵了,但是不明白为什么要减1呢?
      

  4.   

    DAY_OF_WEEK
    public static final int DAY_OF_WEEKget 和 set 的字段数字,指示一个星期中的某天。该字段可取的值为 SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY 和 SATURDAY。 另请参见:
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, 常量字段值--------------------------------------------------------------------------------DAY_OF_WEEK_IN_MONTH
    public static final int DAY_OF_WEEK_IN_MONTHget 和 set 的字段数字,指示当前月中的第几个星期。与 DAY_OF_WEEK 字段一起使用时,就可以惟一地指定某月中的某一天。与 WEEK_OF_MONTH 和 WEEK_OF_YEAR 不同,该字段的值并不 取决于 getFirstDayOfWeek() 或 getMinimalDaysInFirstWeek()。DAY_OF_MONTH 1 到 7 总是对应于 DAY_OF_WEEK_IN_MONTH 1;8 到 14 总是对应于 DAY_OF_WEEK_IN_MONTH 2,依此类推。DAY_OF_WEEK_IN_MONTH 0 表示 DAY_OF_WEEK_IN_MONTH 1 之前的那个星期。负值是从一个月的末尾开始反向计数,因此,一个月的最后一个星期天被指定为 DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1。因为负值是反向计数的,所以它们在月份中的对齐方式通常与正值的不同。例如,如果一个月有 31 天,那么 DAY_OF_WEEK_IN_MONTH -1 将与 DAY_OF_WEEK_IN_MONTH 5 和 DAY_OF_WEEK_IN_MONTH 4 的末尾相重叠。 另请参见:
    DAY_OF_WEEK, WEEK_OF_MONTH, 常量字段值API上面都有的,看看就知道啦,嘿嘿