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)]
但是当我把输入的日期改成星期日的话,他就自动跳到下一个星期了,多加了一天,请问这个问题怎么解决?
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)]
但是当我把输入的日期改成星期日的话,他就自动跳到下一个星期了,多加了一天,请问这个问题怎么解决?
因为这个GregorianCalendar这个对象的月是从0开始的
下面是我对你代码进行修改后的代码,因为你那个我的编译通不过,所以改变较大。
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));
}
}