public static List calendarHeader(String dateStr) { List<String> result = new LinkedList<String>(); List list = ZphUtil.stringToList(dateStr, "-");
String[] DAYS_OF_WEEK = {"星期一", "星期二", "星期三", "星期四",
"星期五", "星期六","星期日"};
GregorianCalendar d = new GregorianCalendar(Integer.valueOf(
(String) list.get(0)).intValue(), Integer.valueOf(
(String) list.get(1)).intValue() - 1, Integer.valueOf(
(String) list.get(2)).intValue());
// int month = d.get(Calendar.MONTH);
int today = d.get(Calendar.DAY_OF_YEAR);
int v = d.get(Calendar.DAY_OF_MONTH) - d.get(Calendar.DAY_OF_WEEK);
d.set(d.get(Calendar.YEAR), d.get(Calendar.MONTH), 1); // 设置当年几月1日
int weekday = d.get(Calendar.DAY_OF_WEEK);
int i = 0;
d.add(Calendar.DAY_OF_YEAR, v);
do {
weekday = d.get(Calendar.DAY_OF_WEEK);
result.add(DAYS_OF_WEEK[i] + "<BR>("
+ (d.get(Calendar.MONTH) + 1) + "-"
+ (d.get(Calendar.DAY_OF_MONTH)+1) + ")");
d.add(Calendar.DAY_OF_YEAR, 1);
i++;
} while (i < 7);
return result;
}
下面是返回的日期格式
[星期一<BR>(8-27), 星期二<BR>(8-28), 星期三<BR>(8-29), 星期四<BR>(8-30), 星期五<BR>(8-31), 星期六<BR>(8-32), 星期日<BR>(9-2)]
但是当我把输入的日期改成星期日的话,他就自动跳到下一个星期了,多加了一天,请问这个问题怎么解决?

解决方案 »

  1.   

    (String) list.get(1)).intValue() - 1,这个为什么减1?
      

  2.   


    因为这个GregorianCalendar这个对象的月是从0开始的
      

  3.   


    下面是我对你代码进行修改后的代码,因为你那个我的编译通不过,所以改变较大。
    public static List calendarHeader(String dateStr) {
    List<String> result = new LinkedList<String>();
                    //simpleDateFormat是专门处理日期格式的类,不需要通过字符串来处理,输出也一样,这里不做修改
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Date date = null;;
    try {
    date = sdf.parse(dateStr);
    } catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    String[] DAYS_OF_WEEK = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六",
    "星期日" };
    Calendar d = Calendar.getInstance();
    d.setTime(date);
    int v = d.get(Calendar.DAY_OF_WEEK);
                    //将日期移至星期一
                    //java中,sunday的值为1,而monday的值为2,这也是你出错的主要原因。
    if (v == Calendar.SUNDAY)
    v = v - Calendar.DAY_OF_WEEK;
    else 
    v = -v + Calendar.MONDAY ;
     
    d.add(Calendar.DAY_OF_YEAR, v);
    int i = 0;
    do {
    result.add(DAYS_OF_WEEK[i] + "<BR>(" + (d.get(Calendar.MONTH) + 1)
    + "-" + d.get(Calendar.DAY_OF_MONTH) + ")");
    d.add(Calendar.DAY_OF_YEAR, 1);
    i++;
    } while (i < 7);
    return result;
    }

    public static void main(String args[]){
    for (int i = 20; i < 27; i++){
    System.out.println(calendarHeader("2012-8-"+i));
    }
    }