java-計算任意日期所在周、月、年的第一天與最後一天
阿新 • • 發佈:2019-02-03
package com.slk.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Map; /** * 該模組可實現自動計算當前日期對應的周,月,年的第一天與最後一天日期,並且可直接指定當前日期為任意日期。 * * @author Administrator * */ public class DateTerminator { // 獲取當前日期所在周的上下界 public final static int CURRENT_WEEK = 0; // 獲取當前日期上一週的上下界 public final static int LAST_WEEK = 1; // 獲取當前日期所在月的上下界 public final static int CURRENT_MONTH = 2; // 獲取當前日期上一月的上下界 public final static int LAST_MONTH = 3; // 獲取當前日期所在月的上下界 public final static int CURRENT_YEAR = 4; // 獲取當前日期上一月的上下界 public final static int LAST_YEAR = 5; /** * 根據日期計算所在周的上下界 * * @param time */ public static Map<String, Object> convertWeekByDate(Date time) { Map<String, Object> map = new HashMap<String, Object>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 設定時間格式 Calendar cal = Calendar.getInstance(); cal.setTime(time); // 判斷要計算的日期是否是週日,如果是則減一天計算週六的,否則會出問題,計算到下一週去了 int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天 if (1 == dayWeek) { cal.add(Calendar.DAY_OF_MONTH, -1); } System.out.println("要計算日期為:" + sdf.format(cal.getTime())); // 輸出要計算日期 cal.setFirstDayOfWeek(Calendar.MONDAY);// 設定一個星期的第一天,按中國的習慣一個星期的第一天是星期一 int day = cal.get(Calendar.DAY_OF_WEEK);// 獲得當前日期是一個星期的第幾天 cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根據日曆的規則,給當前日期減去星期幾與一個星期第一天的差值 String imptimeBegin = sdf.format(cal.getTime()); // System.out.println("所在周星期一的日期:" + imptimeBegin); cal.add(Calendar.DATE, 6); String imptimeEnd = sdf.format(cal.getTime()); // System.out.println("所在周星期日的日期:" + imptimeEnd); map.put("first", imptimeBegin); map.put("last", imptimeEnd); return map; } /** * 根據日期計算當月的第一天與最後一天 * * @param time * @return */ public static Map<String, Object> convertMonthByDate(Date date) { Map<String, Object> map = new HashMap<String, Object>(); SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 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); String day_first = df.format(gcLast.getTime()); // 上個月最後一天 calendar.add(Calendar.MONTH, 1); // 加一個月 calendar.set(Calendar.DATE, 1); // 設定為該月第一天 calendar.add(Calendar.DATE, -1); // 再減一天即為上個月最後一天 String day_last = df.format(calendar.getTime()); map.put("first", day_first); map.put("last", day_last); return map; } /** * 根據日期計算當年的第一天與最後一天 * * @param time * @return */ public static Map<String, Object> convertYearByDate(Date date) { Map<String, Object> map = new HashMap<String, Object>(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); int year = date.getYear() + 1900; calendar.clear(); calendar.set(Calendar.YEAR, year); Date currYearFirst = calendar.getTime(); calendar.set(Calendar.YEAR, year + 1); calendar.add(calendar.DATE, -1); Date lastYearFirst = calendar.getTime(); map.put("first", sdf.format(currYearFirst)); map.put("last", sdf.format(lastYearFirst)); return map; } /** * 外部呼叫函式入口############################################################### * * @param index * @return * @throws ParseException */ public static Map<String, Object> getDateTime(int index) throws ParseException { Map<String, Object> map = null; switch (index) { case 0: map = DateTerminator.convertWeekByDate(new Date()); break; case 1: Calendar c = Calendar.getInstance(); c.add(c.DATE, -7); map = DateTerminator.convertWeekByDate(c.getTime()); break; case 2: Calendar c2 = Calendar.getInstance(); c2.add(c2.MONTH, 1); map = DateTerminator.convertMonthByDate(c2.getTime()); break; case 3: map = DateTerminator.convertMonthByDate(new Date()); break; case 4: map = DateTerminator.convertYearByDate(new Date()); break; case 5: Calendar c5 = Calendar.getInstance(); c5.add(c5.YEAR, -1); map = DateTerminator.convertYearByDate(c5.getTime()); break; default: break; } return map; } }
<strong><span style="font-size:32px;">呼叫:</span></strong>
Map<String, Object> map = null; //呼叫getDateTime方法預設時間為當前時間 map = DateTerminator.getDateTime(DateTerminator.CURRENT_WEEK); map = DateTerminator.getDateTime(DateTerminator.LAST_WEEK); //map = DateTerminator.getDateTime(DateTerminator.CURRENT_MONTH); //map = DateTerminator.getDateTime(DateTerminator.LAST_MONTH); //map = DateTerminator.getDateTime(DateTerminator.CURRENT_YEAR); //map = DateTerminator.getDateTime(DateTerminator.LAST_YEAR); //輸出日期段上下界 System.out.println(map.get("first")); System.out.println(map.get("last")); //也可指定任意時間 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); map = DateTerminator.convertMonthByDate(sdf.parse("2015-06-22")); System.out.println(map.get("first")); System.out.println(map.get("last"));