使用 java.util.Calendar,設定:
setFirstDayOfWeek(Calendar.MONDAY):週一為每週第一天setMinimalDaysInFirstWeek(1):年第一週至少包含 1 天再以 set(Calendar.WEEK_OF_YEAR, week) + set(Calendar.DAY_OF_WEEK, Calendar.MONDAY) 取得該週週一(第一天)。
DateUtilspublic class DateUtils {
// 取得某日期屬於第幾週
public static int getWeekOfYear(Date date) { ... }
// 取得某年總週數
public static int getMaxWeekNumOfYear(int year) { ... }
// 取得某年某週第一天(週一)
public static Date getFirstDayOfWeek(int year, int week) {
Calendar c = Calendar.getInstance();
c.set(Calendar.YEAR, year);
c.set(Calendar.WEEK_OF_YEAR, week);
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
c.setFirstDayOfWeek(Calendar.MONDAY);
return c.getTime();
}
// 取得某年某週最後一天(週日)
public static Date getLastDayOfWeek(int year, int week) { ... }
// 月份、季度、年度首尾日同理,略
}
Calendar.MONTH 從 0 起算,傳入月份需 -1getActualMinimum/Maximum(DAY_OF_MONTH) 自動處理閏年、大小月month = (quarter-1)*3 + 1(首日)、quarter*3(末日)log.info(getFirstDayOfWeek(2013,1)); // Mon Dec 31 00:00:00 CST 2012
log.info(getLastDayOfWeek(2013,1)); // Sun Jan 06 23:59:59 CST 2013
log.info(getFirstDayOfMonth(2013,2)); // Fri Feb 01 00:00:00 CST 2013
log.info(getLastDayOfMonth(2013,2)); // Thu Feb 28 23:59:59 CST 2013
...
此工具類已封裝週/月/季/年首尾日查詢,可直接引入專案使用。