Java根據傳入Date計算所在周、月、季度時間
阿新 • • 發佈:2019-01-04
package com.rdmu.schedulingmeetingplace.common; import org.hibernate.annotations.SourceType; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * Calendar操作Date */ public class Test { /**設定初始值*/ private static Calendar cal; /** * 根據當前系統時區定義Calendar */ static { cal = Calendar.getInstance(); } /** * Date-->String 轉換 * @param date * @return */ public static String dateToString(Date date){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(date); } /** * 獲取指定日期在一週中的第幾天 * @param date */ public static void getDayOfWeek(Date date){ int dayOfWeek = cal.DATE; System.out.println(dayOfWeek); } /** * 獲取指定日期是月中的第幾天 * @param date */ public static void getDayOfMonth(Date date){ int day = date.getDate(); System.out.println(day); } /** * 獲取指定時間所在月份 * @param date */ public static void getMonth(Date date){ cal.setTime(date); //老外計算月份從0開始,轉換為國內月份需要加1 int month = cal.get(cal.MONTH) + 1; System.out.println(month); } /** * 獲取指定時間所在周的週一(一天中最小時間)和周天(一天中最大時間) * @param date */ public static void getFristAndLashOfWeekDay(Date date){ cal.setTime(date); cal.set(cal.DAY_OF_WEEK,cal.MONDAY); Date mondayOld = cal.getTime(); //老外的一週從周天開始,使用cal.SUNDAY獲取到的是上週的周天 cal.set(cal.DAY_OF_WEEK,cal.SATURDAY); //獲取週六,加上一天的毫秒數,計算所在週週天, cal.setTimeInMillis(cal.getTimeInMillis()+24*60*60*1000); Date sundayOld = cal.getTime(); //考慮到使用判斷獲取資料時存在部分資料不顯示問題,逐將日期格式化處理 Date mondayNew = mondayOld; Date sundayNew = sundayOld; try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); mondayNew = sdf.parse(sdf.format(mondayOld)); cal.setTime(sdf.parse(sdf.format(sundayOld))); //用日期獲取資料時會由1秒誤差,若要求比較嚴格,建議不減1,獲取下一天的開始時間 cal.setTimeInMillis(cal.getTimeInMillis()+24*60*60*1000-1); sundayNew = cal.getTime(); } catch (ParseException e) { e.printStackTrace(); System.out.println("執行類:" + Test.class + "中方法:getStartAndEndWeekDay(Date date) 異常"); } System.out.println(mondayNew); System.out.println(String.valueOf(sundayNew)); } /** * 獲取指定時間所在月的第一天(一天中最小時間)和最後一天(一天中最大時間) * @param date */ public static void getFristAndLashOfMonthDay(Date date){ cal.setTime(date); cal.set(cal.DAY_OF_MONTH,1); Date firstDay = cal.getTime(); cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); Date lastDay = cal.getTime(); //考慮到使用判斷獲取資料時存在部分資料不顯示問題,逐將日期格式化處理 Date firstDayNew = firstDay; Date lastDayNew = lastDay; try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); firstDayNew = sdf.parse(sdf.format(firstDay)); cal.setTime(sdf.parse(sdf.format(lastDay))); //用日期獲取資料時會由1秒誤差,若要求比較嚴格,建議不減1,獲取下一天的開始時間 cal.setTimeInMillis(cal.getTimeInMillis()+24*60*60*1000-1); lastDayNew = cal.getTime(); } catch (ParseException e) { e.printStackTrace(); System.out.println("執行類:" + Test.class + "中方法:getFristAndLashOfMonthDay(Date date) 異常"); } System.out.println(firstDayNew); System.out.println(lastDayNew); } /** * 獲取指定時間所在季度的第一天(一天中最小時間)和最後一天(一天中最大時間) * @param date */ public static void getFristAndLashOfDuarterDay(Date date){ cal.setTime(date); int month = cal.get(cal.MONTH) + 1; int quarter = 0; //判斷季度 if (month >= 1 && month <= 3) { quarter = 1; } else if (month >= 4 && month <= 6) { quarter = 2; } else if (month >= 7 && month <= 9) { quarter = 3; } else { quarter = 4; } //獲取指定時間所在季度第一天和最後一天 Date firstDay = null; Date lastDay = null; String str = String.valueOf(date.getYear()); String startDay = ""; String endDay = ""; switch (quarter){ case 1://第一季度 startDay = str + "-01-01 00:00:00"; endDay = str + "-03-31 23:59:59"; break; case 2://第二季度 startDay = str + "-04-01 00:00:00"; endDay = str + "-06-30 23:59:59"; break; case 3://第三季度 startDay = str + "-07-01 00:00:00"; endDay = str + "-09-30 23:59:59"; break; case 4://第四季度 startDay = str + "-10-01 00:00:00"; endDay = str + "-12-31 23:59:59"; break; } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try { firstDay = sdf.parse(startDay); //用日期獲取資料時會由1秒誤差,若要求比較嚴格,建議不減1,獲取下一天的開始時間 cal.setTime(sdf.parse(endDay)); cal.setTimeInMillis(cal.getTimeInMillis()+24*60*60*1000-1); lastDay = cal.getTime(); } catch (ParseException e) { e.printStackTrace(); } System.out.println(dateToString(firstDay)); System.out.println(dateToString(lastDay)); } public static void main(String[] args){ Date date = new Date(119,1,11); System.out.println(dateToString(date)); //獲取指定日期具體日 getDayOfMonth(date); //獲取指定日期是周幾 getDayOfWeek(date); //獲取指定時間所在月份 getMonth(date); //獲取指定時間所在周的週一和周天 getFristAndLashOfWeekDay(date); //獲取指定時間所在月的第一天和最後一天 getFristAndLashOfMonthDay(date); //獲取指定時間所在季度第一天和最後一天 getFristAndLashOfDuarterDay(date); } }