大概的题目内容如下:  
   从画面接受两个字符串,格式如下:1981-02-26 ,1981-08-16
   他要求通过程序分别根据月,周,日处理,得到三个arraylist。
   第一个arraylist按月分就是形成{1981-02-26,1981-02-28,1981-03-01,1981-03-31......,1981-08-01,1981-08-16}这样的格式;
   第二个arraylist按周分,先判断198-02-26是星期几,判断出是周四,然后算出那个星期周日。形成{1981-02-26,1981-02-29,1981-03-01,1981-03-02,1981-03-08,......,1981-08-10,1981-08-16}这样的格式;
   第三个arraylist按日分,就是形成{1981-02-26,"",1981-02-27,""......1981-08-15,"",1981-08-16}这样的格式;     给我两个小时要我作完,光看英文就浪费一段时间了。还要编码。靠简直就是变态

解决方案 »

  1.   

    看不懂题目的要求,呵呵!
    Calendar类里面的API肯定是够用的
      

  2.   

    其实很简单吧,不外乎操作Calendar与SimpleDateFormat而已
    第二组不明白 3月2日与8月10日 是怎样得来的,照我理解应该是说取周四才对啊,怎么是周一
    不管这个的情况下面,代码不复杂 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Calendar start = Calendar.getInstance();
    start.setTime(sdf.parse("1981-02-26")); Calendar end = Calendar.getInstance();
    end.setTime(sdf.parse("1981-08-16"));

    Calendar now = Calendar.getInstance();

    //第一组
    now.setTime(start.getTime());
    ArrayList first = new ArrayList();
    first.add(sdf.format(start.getTime()));
    now.set(Calendar.DATE, now.getActualMaximum(Calendar.DATE));
    if(now.after(start) && now.before(end))
    first.add(sdf.format(now.getTime()));
    while(now.before(end)) {
    now.set(Calendar.DATE, 1);
    now.add(Calendar.MONTH, 1);
    first.add(sdf.format(now.getTime()));

    now.set(Calendar.DATE, now.getActualMaximum(Calendar.DATE));
    if(!now.after(end))
    first.add(sdf.format(now.getTime()));
    }
    if(!now.equals(end))
    first.add(sdf.format(end.getTime()));
    //第二组
    now.setTime(start.getTime());
    ArrayList second = new ArrayList();
    int day = start.get(Calendar.DAY_OF_WEEK);
    second.add(sdf.format(start.getTime()));
    now.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
    if(now.after(start) && now.before(end))
    second.add(sdf.format(now.getTime()));
    while(now.before(end)) {
    now.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    now.add(Calendar.WEEK_OF_YEAR, 1);
    second.add(sdf.format(now.getTime()));

    if(day != Calendar.SATURDAY) {
    now.set(Calendar.DAY_OF_WEEK, day);
    if(!now.after(end))
    second.add(sdf.format(now.getTime()));
    }
    now.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
    if(!now.after(end))
    second.add(sdf.format(now.getTime()));
    }
    if(!now.equals(end))
    second.add(sdf.format(end.getTime()));
    //第三组
    now.setTime(start.getTime());
    ArrayList third = new ArrayList();
    while(!now.after(end)) {
    third.add(sdf.format(now.getTime()));
    now.add(Calendar.DATE, 1);
    }
    //
    System.out.println(first);
    System.out.println(second);
    System.out.println(third);
      

  3.   

    有什么特别的吗?
    1.按照月处理
     他就是开始的日期,计算出月底的日期,然后下一个月的第一天,再月末,一直到结束日期.
     month + 1 ,day 01就是下个月第一天。
     上面的日期减去一天,就是这个月的月末。2.按照周计算
     A.假如有1981-02-29这个值
     他就是不断的计算周末,第一次计算的时候,用了开始日期 + 7 -开始日期的星期几,算出一个文字列,就是年,月不变,算出来的数字,加在日上面.然后换成正确的日期形式,因为1981年没有2月29号.然后开始用Calendar,day加1,加6,计算出每个星期的第一天,和最后一天.到结束日期. B.没有1981-02-29这个值.
     和1的处理逻辑一样的.
      
    3.按照日计算
     这个就没有什么好说的了.
    基本上,这个题目只是简单的应用.没有什么难度可言了.
      

  4.   

    import java.util.*;
    import java.text.*;public class DateTest {
      
      public static void main(String[] args) throws Exception{
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Calendar begin = Calendar.getInstance();
        begin.setTime(sdf.parse("1981-02-28"));
        Calendar end = Calendar.getInstance();
        end.setTime(sdf.parse("1981-08-16"));
    ///第一个arraylist按月分
        ArrayList dateList = new ArrayList();
        int date1 = begin.get(Calendar.DATE);
        if (date1 != begin.getActualMaximum(Calendar.DATE)) {
          dateList.add(sdf.format(begin.getTime()));
          begin.set(Calendar.DATE, begin.getActualMaximum(Calendar.DATE));
        } 
        while(end.after(begin)) {
          dateList.add(sdf.format(begin.getTime()));
          begin.add(Calendar.MONTH, 1);
          begin.set(Calendar.DATE, begin.getActualMinimum(Calendar.DATE));
          if (!end.after(begin)) break;
          dateList.add(sdf.format(begin.getTime()));
          begin.set(Calendar.DATE, begin.getActualMaximum(Calendar.DATE));
        }
        dateList.add(sdf.format(end.getTime()));
          
          
        for(int i = 0; i< dateList.size(); i++) {
          System.out.println(dateList.get(i));
        }
    ///第二个arraylist按周分
        ArrayList second = new ArrayList();
        begin.setTime(sdf.parse("1981-02-26"));
        int day = begin.get(Calendar.DAY_OF_WEEK);
        if (day != Calendar.SUNDAY) {
            second.add(sdf.format(begin.getTime()));
            begin.set(Calendar.DAY_OF_WEEK, begin.getActualMaximum(Calendar.DAY_OF_WEEK));
            begin.add(Calendar.DATE, 1);
          }
        while (end.after(begin)) {
          second.add(sdf.format(begin.getTime()));
          begin.add(Calendar.DATE, 1);
          if (!end.after(begin)) break;
          second.add(sdf.format(begin.getTime()));
          begin.add(Calendar.DATE, 6);
        }
        second.add(sdf.format(end.getTime()));
        System.out.println();
        for(int i = 0; i< second.size(); i++) {
          System.out.println(second.get(i));
        }
        begin.setTime(sdf.parse("1981-02-26"));
        ArrayList third = new ArrayList();
    ///第三个arraylist按日分
        third.add(sdf.format(begin.getTime()));
        begin.add(Calendar.DATE, 1);
        while (end.after(begin)) {
          third.add(sdf.format(begin.getTime()));
          begin.add(Calendar.DATE, 1);
        }
        third.add(sdf.format(end.getTime()));
        System.out.println();
        for(int i = 0; i< third.size(); i++) {
          System.out.println(third.get(i));
        }
          
        
       
        
        
      }
    }
      

  5.   

    呵呵,确实很简单,关键是要理解题目的意思。
    我用PB最多1小时完成。
    虽然我Java不是很熟练,但自觉如果理解了题目的意思,算法确实很简单。
    楼主加油了,这个题目没什么的。
      

  6.   

    我同意ChDw(米) 的说法!!