需求:求近一年的每周的周一,周日的日期格式为yyyy-MM-dd.1:近一年为系统当前日期一直到去年的当前日期:例如,当前日期为2013-08-28,则需要从2012-08-28所在周的周一开始算起,一直到2013-08-28所在周,其中需要每周的周一和周日日期。
2:求某年每个月的第一天和最后一天(共12个月)。

解决方案 »

  1.   

    1. 用calendar接口,先算一年内第一个周一,然后循环加7即可(注意闰年与平年,每加一周就用calendar算算看超过今天日期没,虽然比较慢,但是比较方便可靠)2. 还是用Calendar接口,前一个月得最后一天就是后一个月的第一天减一,所以求出(每个月的第一天再减一 + 7)% 7就行了
      

  2.   

    啥也不说,直接上代码。import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.List;
    public class Test_11 { private static final SimpleDateFormat SDF = new SimpleDateFormat("yyyy-MM-dd");

    /**
     * 测试用例
     */
    public static void main(String[] args) {
    List<String> days1 = findDays_1(new Date());
    for(String day : days1){
    System.out.println(day);
    }
    System.out.println("-------- 我是分割线 -----------");
    List<String> days2 = findDays_2(2013);
    for(String day : days2){
    System.out.println(day);
    }
    } public static List<String> findDays_1(Date day){
    ArrayList<String> days = new ArrayList<String>();
    Calendar cal = Calendar.getInstance();
    cal.setTime(day);
    cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    cal.add(Calendar.DAY_OF_MONTH, 1);
    Date end = cal.getTime();
    cal.setTime(day);
    cal.add(Calendar.YEAR, -1);
    Date cur = null;
    do{
    cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    // Date monday = cal.getTime();
    days.add(SDF.format(cal.getTime()));
    cal.add(Calendar.DAY_OF_MONTH, 6);
    cur = cal.getTime();
    days.add(SDF.format(cur));
    }while(cur.before(end));
    return days;
    }

    public static List<String> findDays_2(int year){
    ArrayList<String> days = new ArrayList<String>();
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.MONTH, 0);
    cal.set(Calendar.DAY_OF_MONTH, 1);
    for(int i=0;i<12;i++){
    days.add(SDF.format(cal.getTime()));
    cal.add(Calendar.MONTH, 1);
    cal.add(Calendar.DAY_OF_MONTH, -1);
    days.add(SDF.format(cal.getTime()));
    cal.add(Calendar.DAY_OF_MONTH, 1);
    }
    return days;
    }

    }