/**
 * 得到开始时间到结束时间的所有日期,并得到对应日期的星期几
 * 返回list 对象,里面存的字符串对象
 * 对象的日期和星期几以  ","  割开 
 * eg: "2008-12-08,星期一"
 */
public static List twoDays(String str1,String str2){
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    List list = new ArrayList();
    Date date1;
    Date date2;
    try {
      date1 = df.parse(str1);
      date2 = df.parse(str2);
      int s = (int) ((date2.getTime() - date1.getTime())/ (24 * 60 * 60 * 1000));
      if(s>0){
        for(int i = 0;i<=s;i++){
          long todayDate = date1.getTime() + i * 24 * 60 * 60 * 1000;
          Date tmDate = new Date(todayDate);
          String tempDateStr = "";
          tempDateStr = new SimpleDateFormat("yyyy-MM-dd").format(tmDate).toString() + "," +new SimpleDateFormat("E").format(tmDate);
          System.out.println(tempDateStr);
          list.add(tempDateStr);
        }
      }else{
       if(s == 0){
       long todayDate = date1.getTime();
          Date tmDate = new Date(todayDate);
          String tempDateStr = "";
          tempDateStr = new SimpleDateFormat("yyyy-MM-dd").format(tmDate).toString() + "," +new SimpleDateFormat("E").format(tmDate);
       }
      }
    } catch (ParseException e) {
      System.out.println("转换错误");
    }
    return list;
  }问题是只能正确打印25天的,而超过25天就会返回上个月的日期
麻烦那位帮看看

解决方案 »

  1.   


    我这也是网上copy的,然后更改了一下,具体是什么错误,我也不清楚
    但前面日期是正确的,后面日期有问题,我就不明白了,
    麻烦能否帮我标记下错误在哪里,谢谢了
      

  2.   


    public static List twoDays(String str1,String str2){
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            List list = new ArrayList();
           try {
    Date b=df.parse(str1);
            Date e=df.parse(str2);
    Calendar c=Calendar.getInstance();
    c.setTime(b);
            while (e.compareTo(c.getTime())>=0){
                  String tempDateStr = "";
                  tempDateStr = new SimpleDateFormat("yyyy-MM-dd").format(c.getTime()).toString() + "," +new SimpleDateFormat("E").format(c.getTime());
                  System.out.println(tempDateStr);
                  list.add(tempDateStr);
                  c.add(c.DATE, 1);
            }
    } catch (ParseException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }
            return list;
    }
      

  3.   

    问题出在这一句上long todayDate = date1.getTime() + i * 24 * 60 * 60 * 1000;当i=25时,i * 24 * 60 * 60 * 1000=-2134967296,int型溢出了。
    可以改成long todayDate = date1.getTime() + i * 24 * 60 * 60 * 1000L;这样i * 24 * 60 * 60 * 1000L就是一个long型,应该就没问题了。
    其实感觉作为解决方案来说还是3楼的比较好,呵呵