import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Map;public class DateUtil { /**
 * @param args
 */
public static void main(String[] args) { //调用,取2015年的第51周的开始日期和结束日期
Map<String, String> map=getSpecialDates(2015,6,51);
System.out.println(map);
//{startDate=2015-12-18, endDate=2015-12-24}
} /**
 * @param year 哪一年的,格式2014、2015这些<br>
 * @param startOfweek 星期几算我们星期的开头,比如星期五,对应的数字就是6,星期四对应的就是5……<br>
 * @param weekIndex 第几周的索引<br>
 * @return 这一周开始日期和结束日期的map<br>
 */
public static Map<String, String> getSpecialDates(int year, int startOfweek,int weekIndex) {
Map<Integer, Map<String, String>> map=getYearWeeks(year,startOfweek);
if(map!=null){
return map.get(weekIndex);
}
return null;
} /**
 * 获得某一年的所有周数<br>
 * @param year 年份,格式2014、2015<br>
 * @param startOfWeek 星期几算我们星期的开头,比如星期五,对应的数字就是6,星期四对应的就是5……<br>
 * @return  
 */
public static Map<Integer, Map<String, String>> getYearWeeks(int year,int startOfWeek) {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
Map<Integer, Map<String, String>> retMap = new HashMap<Integer, Map<String, String>>();
//定义开始的calendar
Calendar calendar = new GregorianCalendar();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, 0);
calendar.set(Calendar.DAY_OF_MONTH, 1);
//定义结束的calendar
Calendar calendarEnd = new GregorianCalendar();
calendarEnd.set(Calendar.YEAR, year);
calendarEnd.set(Calendar.MONTH, 11);
calendarEnd.set(Calendar.DAY_OF_MONTH, 31);
int count=1;
while (calendar.getTime().getTime() <= calendarEnd.getTime().getTime()) {
if (calendar.get(Calendar.DAY_OF_WEEK) == startOfWeek) {
String startDate=sf.format(calendar.getTime());
calendar.add(Calendar.DAY_OF_MONTH, 6);
String endDate=sf.format(calendar.getTime());
if(calendar.YEAR>year){
break;
}
else{
Map<String,String> innerMap = new HashMap<String,String>();
innerMap.put("startDate", startDate);
innerMap.put("endDate", endDate);
retMap.put(count, innerMap);
count++;
}
}
else{
calendar.add(Calendar.DAY_OF_MONTH, 1);
}
}
return retMap;
}}

解决方案 »

  1.   


    public class Test {
        static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");    /**
         * No-arg constructor
         */
        public Test() {
        }    /**
         * TODO
         * 
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub       
            Map<String, Date> result = DateUtil.getWeekDates(2014, 1);
            System.out.println(format.format(result.get("startDate")));
            System.out.println(format.format(result.get("endDate")));
        }
    }class DateUtil {
        public static Map<String, Date> getWeekDates(int year, int numOfWeek) {
            if (numOfWeek > 52 || numOfWeek < 0) {
                new IllegalArgumentException("Invalid parameter!");
            }
            Calendar calendar = new GregorianCalendar();
            Map<String, Date> result = new HashMap<String, Date>();
            int month = 0;
            int day = 1;
            calendar.set(year, month, day, 0, 0, 0);
            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
            int offset = dayOfWeek - 6;
            calendar.set(Calendar.DAY_OF_MONTH, day - offset);
            calendar.add(Calendar.DAY_OF_YEAR, (numOfWeek - 1) * 7);
            result.put("startDate", calendar.getTime());
            calendar.add(Calendar.DAY_OF_YEAR, numOfWeek * 7);
            result.put("endDate", calendar.getTime());
            return result;
        }
    }