周是由周一开始.例:
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
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
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);
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) + "天");
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天
用户输入一个年,周数
要求返回一个日期区间:例如2006年第一周,
2006-01-01是周日
也认为它是第一周.楼主的在处理边界上存在问题,希望能够再接再励!
如果改成其它月的,那么第一周区间就不对了.
cal.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
end = cal.getTime(); //问题应该出在这-行啊!System.out.print("2006年第一周区间:" + format.format(start));
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();
只是得出的结果不符合时我才改的,不明白为什么咱俩的结果总不一致.
呵呵,多谢你了,辛苦了.
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()));
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) {}
}
}