而且,一周的第一天是可以任意指定的。即,如果指定了一周的第一天是周五,那么如果今天是周四的话,下周的第一天指的就是第二天。
对JDK 1.4的Calendar类很不熟悉,请教有解决过类似问题的同志,能给个指点么?

解决方案 »

  1.   

    查一下java api啊........例如:Date date = new Date();//your date 
    GregorianCalendar cal = new GregorianCalendar();
    cal.setTime(date);
    cal.add(GregorianCalendar.DATE,-3);//前推3天的日期
    System.out.println(cal.getTime());cal.add(GregorianCalendar.DATE,-7);//上一周的日期
      

  2.   

    addDay(7)
    addMonth()
    addMonth().addMonth().addMonth()
      

  3.   

    可以作到的
    Calendar类里面的add方法
      

  4.   

    比较麻烦的就是对星期的推算。
    比如今天是周四,那么一般来说下一周的第一天应该是下周一。
    但现在要求每周的第一天是可以指定的,那么如果指定了每周的第一天是周六的话,下一周的第一天就是本周周六了。
    我查了API,本来以为Calender的setFirstDayOfWeek()和getFirstDayOfWeek()可以解决这个问题。但我发现即使用setFirstDayOfWeek()方法设置了一周的第一天,用calendar.get(Calendar.DAY_OF_WEEK)取得的数字仍然没有变化;例子如下:
        public void getPaymentDate(String firstDayOfWeek){
            Calendar calendar = new GregorianCalendar();
            String firstDayOfThisWeek = Integer.toString(calendar.getFirstDayOfWeek());
            
            if (logger.isDebugEnabled()) {
                logger.debug("---------------initialization");
            }        if (logger.isDebugEnabled()) {
                logger.debug("getPaymentDate() - DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
            }        calendar.setFirstDayOfWeek(Integer.parseInt(firstDayOfWeek));
            
            if (logger.isDebugEnabled()) {
                logger.debug("---------------after set first day of week parameter");
            }
            
            if (logger.isDebugEnabled()) {
                logger.debug("getPaymentDate() - DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
            }
           
        }
    运行结果如下:
    2005-07-14 15:54:59,881 org.zmaze.util.CalendarTest(CalendarTest.java:24)
    DEBUG: ---------------initialization
    2005-07-14 15:54:59,921 org.zmaze.util.CalendarTest(CalendarTest.java:28)
    DEBUG: getPaymentDate() - DAY_OF_WEEK: 5
    2005-07-14 15:54:59,931 org.zmaze.util.CalendarTest(CalendarTest.java:34)
    DEBUG: ---------------after set first day of week parameter
    2005-07-14 15:54:59,931 org.zmaze.util.CalendarTest(CalendarTest.java:38)
    DEBUG: getPaymentDate() - DAY_OF_WEEK: 5
    现在大家知道我的意思了吧。有没有好的思路或者解决方法呢?请不吝赐教。
    最好不要用getTime()方法具体的去计算毫秒数,那样类似的方法我已经用javascript在客户端实现了。现在就是想了解一下用java的API有没有比较成型的解决方案。
    多谢各位。
      

  5.   

    我现在用写了个这样的方法实现。不知道还有没有更好的方式:public void getPaymentDate(String strFirstDayOfWeek) {
            Calendar calendar = new GregorianCalendar();
            
            Calendar calNextWeek = (Calendar)calendar.clone();
            Calendar calNext2Week = (Calendar)calendar.clone();
            
            Date dateNextWeek = new Date();
            Date dateNext2Week = new Date();
            
            String strNextWeek  = "";
            String strNext2Week = "";
            
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy'-'MM'-'dd");
            
            int firstDayOfWeek = Integer.parseInt(strFirstDayOfWeek);
            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK) - 1;
            dayOfWeek = (dayOfWeek == 0) ? 7 : dayOfWeek;
            int days2NextWeek = (6 - (dayOfWeek - firstDayOfWeek)) % 7;
            int days2Next2Week = days2NextWeek + 7;
            calNextWeek.add(Calendar.DATE,days2NextWeek);
            calNext2Week.add(Calendar.DATE,days2Next2Week);
            
            dateNextWeek = calNextWeek.getTime();
            dateNext2Week = calNext2Week.getTime();        if (logger.isDebugEnabled()) {
                logger.debug("getPaymentDate(String) -  : firstDayOfWeek="
                        + firstDayOfWeek + ", dayOfWeek=" + dayOfWeek
                        + ", days2NextWeek=" + days2NextWeek + ", days2Next2Week="
                        + days2Next2Week);
            }        strNextWeek = sdf.format(dateNextWeek);
            strNext2Week = sdf.format(dateNext2Week);
        }
      

  6.   

    Calendar cal=Calendar.getInstance();
    int dayOfWeek=cal.get(cal.DAY_OF_WEEK)-cal.getFirstDayOfWeek();//当天是星期几