周是由周一开始.例:
2005年最后一周区间:2005-12-26 ---2005-12-31  共六天,
2006年第一周区间  2006-01-01 ----2006-01-01  共一天.
第二周区间  2006-01-02 ----2006-01-08
....
第五十三周  2006-12-25  --- 2006-12-31

解决方案 »

  1.   

    it's very easy
    startOfCurrentWeek = new SimpleDateFormat("yyyyww").parse(request
    .getParameter("yyyy")// 此周第一天
    + request.getParameter("week"));
    int nextWeek = Integer.parseInt(request.getParameter("week")) + 1;
    endOfCurrentWeek = new SimpleDateFormat("yyyyww").parse(request
    .getParameter("yyyy")
    + nextWeek);
      

  2.   

    long ONEDATE = 1000l * 3600 * 24;
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    Calendar cal = Calendar.getInstance();
    cal.setFirstDayOfWeek(Calendar.MONDAY);
    cal.set(Calendar.YEAR, 2005);

    //最后一周
    cal.set(Calendar.DAY_OF_YEAR, cal.getActualMaximum(Calendar.DAY_OF_YEAR));
    Date end = cal.getTime();

    cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    Date start = cal.getTime();

    System.out.print("2005年最后一周区间:" + format.format(start));
    System.out.println("--" + format.format(end) + " 共" + ((end.getTime() - start.getTime()) / ONEDATE + 1) + "天");


    //第一周
    cal.set(Calendar.DAY_OF_YEAR, 1);
    cal.set(Calendar.YEAR, 2006);
    start = cal.getTime();

    cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    end = cal.getTime();

    System.out.print("2006年第一周区间:" + format.format(start));
    System.out.println("--" + format.format(end) + " 共" + ((end.getTime() - start.getTime()) / ONEDATE + 1) + "天");

    //第N周
    cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);//需要先设置星期
    cal.set(Calendar.WEEK_OF_YEAR, 20); start = cal.getTime();

    cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    end = cal.getTime();

    System.out.print("2006年第20周区间:" + format.format(start));
    System.out.println("--" + format.format(end) + " 共" + ((end.getTime() - start.getTime()) / ONEDATE + 1) + "天");
      

  3.   

    to chdw:这是你的执行结果,和我要求的不一致啊
    2005年最后一周区间:2005-11-28--2005-12-31 共34天2006年第一周区间:2006-01-01--2006-11-26 共330天2006年第20周区间:2006-05-08--2006-05-14 共7天
      

  4.   

    to all希望大家能给出一个测试数据.谢谢问题重申一下:
    用户输入一个年,周数
    要求返回一个日期区间:例如2006年第一周,
    2006-01-01是周日
    也认为它是第一周.楼主的在处理边界上存在问题,希望能够再接再励!
      

  5.   

    to chdw你将本机的时间设置一下.我将自己服务器时间改成一月份,可以得出你的结果.
    如果改成其它月的,那么第一周区间就不对了.
    cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    end = cal.getTime();  //问题应该出在这-行啊!System.out.print("2006年第一周区间:" + format.format(start));
      

  6.   

    搞不明白你的机器,我换了3台机器跑都肯定没有任何问题除非你每次去重新cal = Calendar.getInstance()了,但是我代码只get了一次而已!
      

  7.   

    呵呵,我实在理解不了你的机器了1.1
    2005年最后一周区间:2005-12-26--2005-12-31 共6天
    2006年第一周区间:2006-01-01--2006-01-01 共1天
    2006年第20周区间:2006-05-08--2006-05-14 共7天
    1.30
    2005年最后一周区间:2005-12-26--2005-12-31 共6天
    2006年第一周区间:2006-01-01--2006-01-01 共1天
    2006年第20周区间:2006-05-08--2006-05-14 共7天
    4.1
    2005年最后一周区间:2005-12-26--2005-12-31 共6天
    2006年第一周区间:2006-01-01--2006-01-01 共1天
    2006年第20周区间:2006-05-08--2006-05-14 共7天
    我的测试结果都一样。这样吧,你修改一下代码,保险一点,开始那段代码改为
    Calendar cal = Calendar.getInstance();
    cal.setFirstDayOfWeek(Calendar.MONDAY);
    cal.set(Calendar.YEAR, 2005);
    cal.set(Calendar.MONTH, Calendar.JANUARY);
    cal.set(Calendar.DATE, 1);
    cal.getTime();
      

  8.   

    其实我怎么看都觉得是你把我的代码修改了在中间那额外的调用了cal = Calendar.getInstance()导致cal被重置为当前时间了
      

  9.   

    最初代码我是一字不差的COPY过来的,
    只是得出的结果不符合时我才改的,不明白为什么咱俩的结果总不一致.
    呵呵,多谢你了,辛苦了.
      

  10.   

    int year = 2005;
    int week = 53;
    long ONEDATE = 1000l * 3600 * 24;
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    Calendar cal = Calendar.getInstance();
    cal.setFirstDayOfWeek(Calendar.MONDAY);
    System.out.println(format.format(cal.getTime())); //开始日期
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.WEEK_OF_YEAR, week);
    cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    while (cal.get(Calendar.YEAR)<year) {
    cal.setTimeInMillis(cal.getTimeInMillis() + ONEDATE);
    }
    System.out.println(format.format(cal.getTime())); //结束日期
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.WEEK_OF_YEAR, week);
    cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    while (cal.get(Calendar.YEAR)>year) {
    cal.setTimeInMillis(cal.getTimeInMillis() - ONEDATE);
    }
    System.out.println(format.format(cal.getTime()));
      

  11.   

    public class ParamHandler{    //最早取周的所在日期区间:
        public static String[] getStartEndDate(String StrYear, String StrWeek) {
    String[] dateArray = {
        "1977-01-01", "1977-01-01"};
    try {
        int year = java.lang.Integer.parseInt(StrYear);
        int week = java.lang.Integer.parseInt(StrWeek);
        Calendar calendar1 = new GregorianCalendar(year, 0, 1);
        int prevDay = calendar1.get(Calendar.DAY_OF_WEEK) - 2;
        String startDate = calendar1.get(Calendar.YEAR) + "-01-01";
        calendar1.set(Calendar.YEAR, year);
        calendar1.set(Calendar.DAY_OF_YEAR, week * 7 - prevDay);
        java.util.Date mm = calendar1.getTime();
        calendar1.setTime(mm);
        int endYear = calendar1.get(Calendar.YEAR);
        String endMonth = (1 + calendar1.get(Calendar.MONTH)) + "";
        String endDay = calendar1.get(Calendar.DAY_OF_MONTH) + "";
        if (endMonth.length() == 1) {
    endMonth = "0" + endMonth;
        }
        if (endDay.length() == 1) {
    endDay = "0" + endDay;
        }
        String endDate = endYear + "-" + endMonth + "-" + endDay;
        Calendar calendar2 = new GregorianCalendar(endYear,
    Integer.parseInt(endMonth) - 1, Integer.parseInt(endDay));
        calendar2.add(Calendar.DATE, -6);
        java.util.Date dd = calendar2.getTime();
        SimpleDateFormat bbb = new java.text.SimpleDateFormat(
    "yyyy-MM-dd hh:mm:ss");
        calendar2.setTime(dd);
        int StartYear = calendar2.get(Calendar.YEAR);
        int StartMonth = calendar2.get(Calendar.MONTH);
        int StartDay = calendar2.get(Calendar.DAY_OF_MONTH);
        startDate = StartYear + "-" + (StartMonth + 1) + "-" + StartDay;     //修改结束
        dateArray[0] = startDate;
        dateArray[1] = endDate;
    }
    catch (Exception ex) { } return dateArray;
        }
        //COPY来的
        public static String getDate(String year,String week) {
    long ONEDATE = 1000l * 3600 * 24;
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    Calendar cal = Calendar.getInstance();
    cal.setFirstDayOfWeek(Calendar.MONDAY);
    cal.set(Calendar.YEAR, 2005);
    cal.set(Calendar.MONTH, Calendar.JANUARY);
    cal.set(Calendar.DATE, 1);
    cal.getTime(); //最后一周
    cal.set(Calendar.DAY_OF_YEAR, cal.getActualMaximum(Calendar.DAY_OF_YEAR));
    Date end = cal.getTime(); cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    Date start = cal.getTime(); System.out.print("2005年最后一周区间:" + format.format(start));
    System.out.println("--" + format.format(end) + " 共" +
       ( (end.getTime() - start.getTime()) / ONEDATE + 1) +
       "天"); //第一周
    cal.set(Calendar.DAY_OF_YEAR, 1);
    cal.set(Calendar.YEAR, 2006);
    start = cal.getTime(); cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    end = cal.getTime(); System.out.print("2006年第一周区间:" + format.format(start));
    System.out.println("--" + format.format(end) + " 共" +
       ( (end.getTime() - start.getTime()) / ONEDATE + 1) +
       "天"); //第N周
    cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); //需要先设置星期
    cal.set(Calendar.WEEK_OF_YEAR, 20); start = cal.getTime(); cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    end = cal.getTime(); System.out.print("2006年第20周区间:" + format.format(start));
    System.out.println("--" + format.format(end) + " 共" +
       ( (end.getTime() - start.getTime()) / ONEDATE + 1) +
       "天"); return week;    }    public static void main(String[] args) {
    ParamHandler ph = new ParamHandler();
    try {
        String[] strDate = getStartEndDate("2006","1");
        String date = getDate("2006","1");
    }
    catch (Exception e) {}
        }
    }