Java獲取各種第一天
阿新 • • 發佈:2019-01-07
前段時間自己學習的時候發現,很多時候我們需要獲取某一個日期所在周、月、年的第一天或者最後一天。為了方便以後自己用,就決定整理一下,寫一個工具類。在網上查了好多文章,最後自己總結了一下寫出下面的工具類:
package cn.eboy.util; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * * @ClassName: DateUtil * @Description: 日期計算有關的工具類TODO * @author ExceptionalBoy * @date 2017年11月14日 上午10:50:04 * */ public class DateUtil { /** * 前一週的第一天 */ public final static int FIRST_DAY_OF_PRE_WEEK = 0; /** * 前一週的最後一天 */ public final static int LAST_DAY_OF_PRE_WEEK = 1; /** * 本週的第一天 */ public final static int FIRST_DAY_OF_CUR_WEEK = 2; /** * 本週的最後一天 */ public final static int LAST_DAY_OF_CUR_WEEK = 3; /** * 前一月的第一天 */ public final static int FIRST_DAY_OF_PRE_MONTH = 4; /** * 前一月的最後一天 */ public final static int LAST_DAY_OF_PRE_MONTH = 5; /** * 本月的第一天 */ public final static int FIRST_DAY_OF_CUR_MONTH = 6; /** * 本月的最後一天 */ public final static int LAST_DAY_OF_CUR_MONTH = 7; /** * 前一年的第一天 */ public final static int FIRST_DAY_OF_PRE_YEAR = 8; /** * 前一年的最後一天 */ public final static int LAST_DAY_OF_PRE_YEAR = 9; /** * 本年的第一天 */ public final static int FIRST_DAY_OF_CUR_YEAR = 10; /** * 本年的最後一天 */ public final static int LAST_DAY_OF_CUR_YEAR = 11; //第一天 private static String firstDay; //最後一天 private static String lastDay; //日期格式化物件 private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); /** * * @Title: getDateByConditions * @Description: 根據引數日期及要獲取的日期條件,獲取相應的日期TODO * @author ExceptionalBoy * @param @param date * @param @param contition * @param @return * @return String * @throws * @date 2017年11月14日 上午10:59:44 */ public static String getDateByConditions(Date date,int contition){ String day = null; switch (contition) { case 0: day = firstDayOfPreWeek(date); break; case 1: day = lastDayOfPreWeek(date); break; case 2: day = firstDayOfCurWeek(date); break; case 3: day = lastDayOfCurWeek(date); break; case 4: day = firstDayOfPreMonth(date); break; case 5: day = lastDayOfPreMonth(date); break; case 6: day = firstDayOfCurMonth(date); break; case 7: day = lastDayOfCurMonth(date); break; case 8: day = firstDayOfPreYear(date); break; case 9: day = lastDayOfPreYear(date); break; case 10: day = firstDayOfCurYear(date); break; case 11: day = lastDayOfCurYear(date); break; default: break; } return day; } /** * * @Title: firstDayOfPreWeek * @Description: 獲取引數日期前一週的第一天TODO * @author ExceptionalBoy * @param @param date * @param @return * @return String * @throws * @date 2017年11月14日 上午10:54:41 */ private static String firstDayOfPreWeek(Date date){ Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.DATE,-7); // 判斷要計算的日期是否是週日,如果是則減一天計算週六的,否則會出問題,計算到下一週去了 int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天 if (1 == dayWeek) { cal.add(Calendar.DAY_OF_MONTH, -1); } cal.setFirstDayOfWeek(Calendar.MONDAY);// 設定一個星期的第一天,按中國的習慣一個星期的第一天是星期一 int day = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根據日曆的規則,給當前日期減去星期幾與一個星期第一天的差值 firstDay = dateFormat.format(cal.getTime()); return firstDay; } /** * * @Title: lastDayOfPreWeek * @Description: 獲取引數日期前一週的最後一天TODO * @author ExceptionalBoy * @param @param date * @param @return * @return String * @throws * @date 2017年11月14日 上午10:55:04 */ private static String lastDayOfPreWeek(Date date){ Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.DATE,-7); // 判斷要計算的日期是否是週日,如果是則減一天計算週六的,否則會出問題,計算到下一週去了 int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天 if (1 == dayWeek) { cal.add(Calendar.DAY_OF_MONTH, -1); } cal.setFirstDayOfWeek(Calendar.MONDAY);// 設定一個星期的第一天,按中國的習慣一個星期的第一天是星期一 int day = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根據日曆的規則,給當前日期減去星期幾與一個星期第一天的差值 cal.add(Calendar.DATE, 6); lastDay = dateFormat.format(cal.getTime()); return lastDay; } /** * * @Title: firstDayOfCurWeek * @Description: 獲取引數日期所在周的第一天TODO * @author ExceptionalBoy * @param @param date * @param @return * @return String * @throws * @date 2017年11月14日 上午10:55:27 */ private static String firstDayOfCurWeek(Date date){ Calendar cal = Calendar.getInstance(); cal.setTime(date); // 判斷要計算的日期是否是週日,如果是則減一天計算週六的,否則會出問題,計算到下一週去了 int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天 if (1 == dayWeek) { cal.add(Calendar.DAY_OF_MONTH, -1); } cal.setFirstDayOfWeek(Calendar.MONDAY);// 設定一個星期的第一天,按中國的習慣一個星期的第一天是星期一 int day = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根據日曆的規則,給當前日期減去星期幾與一個星期第一天的差值 firstDay = dateFormat.format(cal.getTime()); return firstDay; } /** * * @Title: lastDayOfCurWeek * @Description: 獲取引數日期所在周的最後一天TODO * @author ExceptionalBoy * @param @param date * @param @return * @return String * @throws * @date 2017年11月14日 上午10:55:50 */ private static String lastDayOfCurWeek(Date date){ Calendar cal = Calendar.getInstance(); cal.setTime(date); // 判斷要計算的日期是否是週日,如果是則減一天計算週六的,否則會出問題,計算到下一週去了 int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天 if (1 == dayWeek) { cal.add(Calendar.DAY_OF_MONTH, -1); } cal.setFirstDayOfWeek(Calendar.MONDAY);// 設定一個星期的第一天,按中國的習慣一個星期的第一天是星期一 int day = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根據日曆的規則,給當前日期減去星期幾與一個星期第一天的差值 cal.add(Calendar.DATE, 6); lastDay = dateFormat.format(cal.getTime()); return lastDay; } /** * * @Title: firstDayOfPreMonth * @Description: 獲取引數日期前一月的第一天TODO * @author ExceptionalBoy * @param @param date * @param @return * @return String * @throws * @date 2017年11月14日 上午10:56:15 */ private static String firstDayOfPreMonth(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, -1); Date theDate = calendar.getTime(); // 上個月第一天 GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance(); gcLast.setTime(theDate); gcLast.set(Calendar.DAY_OF_MONTH, 1); firstDay = dateFormat.format(gcLast.getTime()); return firstDay; } /** * * @Title: lastDayOfPreMonth * @Description: 獲取引數日期前一月的最後一天TODO * @author ExceptionalBoy * @param @param date * @param @return * @return String * @throws * @date 2017年11月14日 上午10:56:36 */ private static String lastDayOfPreMonth(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, -1); calendar.add(Calendar.MONTH, 1); // 加一個月 calendar.set(Calendar.DATE, 1); // 設定為該月第一天 calendar.add(Calendar.DATE, -1); // 再減一天即為上個月最後一天 lastDay = dateFormat.format(calendar.getTime()); return lastDay; } /** * * @Title: firstDayOfCurMonth * @Description: 獲取引數日期所在月的第一天TODO * @author ExceptionalBoy * @param @param date * @param @return * @return String * @throws * @date 2017年11月14日 上午10:57:02 */ private static String firstDayOfCurMonth(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); Date theDate = calendar.getTime(); // 上個月第一天 GregorianCalendar gcLast = (GregorianCalendar) Calendar.getInstance(); gcLast.setTime(theDate); gcLast.set(Calendar.DAY_OF_MONTH, 1); firstDay = dateFormat.format(gcLast.getTime()); return firstDay; } /** * * @Title: lastDayOfCurMonth * @Description: 獲取引數日期所在月的最後一天TODO * @author ExceptionalBoy * @param @param date * @param @return * @return String * @throws * @date 2017年11月14日 上午10:57:29 */ private static String lastDayOfCurMonth(Date date){ Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, 1); // 加一個月 calendar.set(Calendar.DATE, 1); // 設定為該月第一天 calendar.add(Calendar.DATE, -1); // 再減一天即為上個月最後一天 lastDay = dateFormat.format(calendar.getTime()); return lastDay; } /** * * @Title: firstDayOfPreYear * @Description: 獲取引數日期前一年的第一天TODO * @author ExceptionalBoy * @param @param date * @param @return * @return String * @throws * @date 2017年11月14日 上午10:58:02 */ private static String firstDayOfPreYear(Date date){ Calendar calendar = Calendar.getInstance(); int year = date.getYear() + 1900; calendar.clear(); calendar.set(Calendar.YEAR, year-1); firstDay = dateFormat.format(calendar.getTime()); return firstDay; } /** * * @Title: lastDayOfPreYear * @Description: 獲取引數日期前一年的最後一天TODO * @author ExceptionalBoy * @param @param date * @param @return * @return String * @throws * @date 2017年11月14日 上午10:58:25 */ private static String lastDayOfPreYear(Date date){ Calendar calendar = Calendar.getInstance(); int year = date.getYear() + 1900; calendar.clear(); calendar.set(Calendar.YEAR, year); calendar.add(calendar.DATE, -1); lastDay = dateFormat.format(calendar.getTime()); return lastDay; } /** * * @Title: firstDayOfCurYear * @Description: 獲取引數日期所在年的第一天TODO * @author ExceptionalBoy * @param @param date * @param @return * @return String * @throws * @date 2017年11月14日 上午10:58:52 */ private static String firstDayOfCurYear(Date date){ Calendar calendar = Calendar.getInstance(); int year = date.getYear() + 1900; calendar.clear(); calendar.set(Calendar.YEAR, year); firstDay = dateFormat.format(calendar.getTime()); return firstDay; } /** * * @Title: lastDayOfCurYear * @Description: 獲取引數日期所在年的最後一天TODO * @author ExceptionalBoy * @param @param date * @param @return * @return String * @throws * @date 2017年11月14日 上午10:59:16 */ private static String lastDayOfCurYear(Date date){ Calendar calendar = Calendar.getInstance(); int year = date.getYear() + 1900; calendar.clear(); calendar.set(Calendar.YEAR, year+1); calendar.add(calendar.DATE, -1); lastDay = dateFormat.format(calendar.getTime()); return lastDay; } }