因領導懶惰,頁面查詢條件中的日期項懶得手工輸入,查詢條件變作上月,上季,上周,故討教多方,寫了一個工具類,以作日後參考.package util;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.GregorianCalendar;public class DateTool { public static long ONE_DAYS_TIME = 24*60*60*1000;//1天的毫秒數 public static long TWO_DAYS_TIME = 2*24*60*60*1000;//2天的毫秒數 public static long THREE_DAYS_TIME = 3*24*60*60*1000;//3天的毫秒數 public static long FOUR_DAYS_TIME = 4*24*60*60*1000;//4天的毫秒數 public static long FIVE_DAYS_TIME = 5*24*60*60*1000;//5天的毫秒數 public static long SIX_DAYS_TIME = 6*24*60*60*1000;//6天的毫秒數 public static long SEVEN_DAYS_TIME = 7*24*60*60*1000;//7天的毫秒數 public static long EIGHT_DAYS_TIME = 8*24*60*60*1000;//8天的毫秒數 public static long NINE_DAYS_TIME = 9*24*60*60*1000;//9天的毫秒數 public static long TEN_DAYS_TIME = 10*24*60*60*1000;//10天的毫秒數 public static long ELEVEN_DAYS_TIME = 11*24*60*60*1000;//11天的毫秒數 public static long TWELVE_DAYS_TIME = 12*24*60*60*1000;//12天的毫秒數 public static long THIRTEEN_DAYS_TIME = 13*24*60*60*1000;//13天的毫秒數 / ** * 得到某個日期上一年的年份 * @param dateString 格式yyyyMMdd * @return 4位年份值 */ public static String getLastYear(String dateString){ String currentYear = dateString.substring(0, 4);//該日期的所在年份 return String.valueOf(Integer.parseInt(currentYear)-1); } / ** * 得到某個日期上月的月份 * @param dateString 格式yyyyMMdd * @return 2位月份值 1月份返回12 */ public static String getLastMonth(String dateString){ String currentMonth = dateString.substring(4, 6);//改日期所在月份 if("01".equals(currentMonth)){ currentMonth = "12"; }else if(Integer.parseInt(currentMonth)>10){ currentMonth = String.valueOf(Integer.parseInt(currentMonth)-1); }else{ currentMonth = "0"+String.valueOf(Integer.parseInt(currentMonth)-1); } return currentMonth; } / ** * 得到某一日期的上個月的開始日期 * @param dateString 格式yyyyMMdd * @return 8位日期值 */ public static String getBeginningDateOfLastMonth(String dateString) { String lastYear = getLastYear(dateString);//該日期上年年份 String lastMonth = getLastMonth(dateString);//改日期上月月份 if("12".equals(lastMonth)){ return lastYear+lastMonth+"01"; }else{ return dateString.substring(0,4)+lastMonth+"01"; } } / ** * 得到某個日期上月月份的結束日期 * @param dateString 格式yyyyMMdd * @return 8位日期值 */ public static String getEndingDateOfLastMonth(String dateString){ String lastYear_month = getBeginningDateOfLastMonth(dateString).substring(0, 6);//該月份上月月份的年+月 String lastYear = lastYear_month.substring(0,4);//該日期上年年份 String lastMonth = lastYear_month.substring(4,6);//該日期上月月份 String date = null; switch (Integer.parseInt(lastMonth)) { case 2: int intValueOfYear = Integer.parseInt(lastYear); if((intValueOfYear%4==0)||(intValueOfYear%100!=0&&intValueOfYear%400==0)){ date = lastYear_month+"29";//閏年2月29天 }else{ date = lastYear_month+"28";//非閏年2月28天 } break; case 4: case 6: case 9: case 11: date = lastYear_month+"30";//4,6,9,11月30天 break; default: date = lastYear_month+"31";//1,3,5,7,8,10,12月31天 break; } return date; } / ** * 得到某個日期上一季度的起始月份 * @param dateString * @return 2位月份值 */ public static String getBeginningMonthOfLastSeason(String dateString){ String currentMonth = dateString.substring(4, 6);//當前月份 String monthOfLastSeason = null;//上一季度起始月份 switch(Integer.parseInt(currentMonth)){ case 1: case 2: case 3: monthOfLastSeason = "10"; break; case 4: case 5: case 6: monthOfLastSeason = "01"; break; case 7: case 8: case 9: monthOfLastSeason = "04"; break; default: monthOfLastSeason = "07"; break; } return monthOfLastSeason; } / ** * 得到某個日期上一季度的結束月份 * @param dateString * @return 2位月份值 */ public static String getEndingMonthOfLastSeason(String dateString){ String currentMonth = dateString.substring(4, 6);//當前月份 String monthOfLastSeason = null;//上一季度結束月份 switch(Integer.parseInt(currentMonth)){ case 1: case 2: case 3: monthOfLastSeason = "12"; break; case 4: case 5: case 6: monthOfLastSeason = "03"; break; case 7: case 8: case 9: monthOfLastSeason = "06"; break; default: monthOfLastSeason = "09"; break; } return monthOfLastSeason; } / ** * 得到某個日期上一季度的開始日期 * @param dateString * @return 8位日期 */ public static String getBeginingDateOfLastSeason(String dateString){ String currentYear = dateString.substring(0, 4);//該日期所在年份 String lastYear = getLastYear(dateString);//該日期上一年年份 String currentMonth = dateString.substring(4, 6);//該日期所在月份 String beginningMonthOfLastSeason = getBeginningMonthOfLastSeason(dateString);//該日期上一季度起始月份 String date = null; if("01".equals(currentMonth)||"02".equals(currentMonth)||"03".equals(currentMonth)){ date = lastYear+beginningMonthOfLastSeason+"01"; }else{ date = currentYear+beginningMonthOfLastSeason+"01"; } return date; } / ** * 得到某個日期上一季度的結束日期 * @param dateString * @return 8位日期 */ public static String getEndingDateOfLastSeason(String dateString){ String currentYear = dateString.substring(0, 4);//該日期所在年份 String lastYear = getLastYear(dateString);//該日期上一年年份 String currentMonth = dateString.substring(4, 6);//該日期所在月份 String endingMonthOfLastSeason = getEndingMonthOfLastSeason(dateString);//該日期上季度結束月份 String date = null; if("01".equals(currentMonth)||"02".equals(currentMonth)||"03".equals(currentMonth)){ switch (Integer.parseInt(endingMonthOfLastSeason)) { case 2: int intValueOfYear = Integer.parseInt(lastYear); if((intValueOfYear%4==0)||(intValueOfYear%100!=0&&intValueOfYear%400==0)){ date = lastYear+endingMonthOfLastSeason+"29";//閏年2月29天 }else{ date = lastYear+endingMonthOfLastSeason+"28";//非閏年2月28天 } break; case 4: case 6: case 9: case 11: date = lastYear+endingMonthOfLastSeason+"30";//4,6,9,11月30天 break; default: date = lastYear+endingMonthOfLastSeason+"31";//1,3,5,7,8,10,12月31天 break; } }else{ switch (Integer.parseInt(endingMonthOfLastSeason)) { case 2: int intValueOfYear = Integer.parseInt(currentYear); if((intValueOfYear%4==0)||(intValueOfYear%100!=0&&intValueOfYear%400==0)){ date = currentYear+endingMonthOfLastSeason+"29";//閏年2月29天 }else{ date = currentYear+endingMonthOfLastSeason+"28";//非閏年2月28天 } break; case 4: case 6: case 9: case 11: date = currentYear+endingMonthOfLastSeason+"30";//4,6,9,11月30天 break; default: date = currentYear+endingMonthOfLastSeason+"31";//1,3,5,7,8,10,12月31天 break; } } return date; } / ** * 得到某個日期上一周的起始日期(大致思路:獲得該日期的星期資訊,和距離1970.1.1的毫秒數,如為周一,將此毫秒數向前減7天的毫秒數,周二-周日依次類推) * @param dateString * @return 8位日期 * @throws ParseException */ public static String getBeginningDateOfLastWeek(String dateString) throws ParseException{ DateFormat dateFormater = new SimpleDateFormat("yyyyMMdd"); Date dateObject = dateFormater.parse(dateString);//將日期文字轉換為日期對象 Calendar calendar = new GregorianCalendar(); calendar.setTime(dateObject); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);//該日期的星期 long time = dateObject.getTime(); switch (dayOfWeek) { case 2: dateObject.setTime(time-DateTool.SEVEN_DAYS_TIME);//周一,美國和歐洲習慣把周日當作每周的第一天,故周一為2 break; case 3: dateObject.setTime(time-DateTool.EIGHT_DAYS_TIME); break; case 4: dateObject.setTime(time-DateTool.NINE_DAYS_TIME); break; case 5: dateObject.setTime(time-DateTool.TEN_DAYS_TIME); break; case 6: dateObject.setTime(time-DateTool.ELEVEN_DAYS_TIME); break; case 7: dateObject.setTime(time-DateTool.TWELVE_DAYS_TIME); break; default: dateObject.setTime(time-DateTool.THIRTEEN_DAYS_TIME); break; } String date = dateFormater.format(dateObject); return date; } / ** * 得到某個日期上一周的結束日期 * @param dateString * @return 8位日期 * @throws ParseException */ public static String getEndingDateOfLastWeek(String dateString) throws ParseException{ DateFormat dateFormater = new SimpleDateFormat("yyyyMMdd"); Date dateObject = dateFormater.parse(dateString);//將日期文字轉換為日期對象 Calendar calendar = new GregorianCalendar(); calendar.setTime(dateObject); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);//該日期的星期 long time = dateObject.getTime(); switch (dayOfWeek) { case 2: dateObject.setTime(time-DateTool.ONE_DAYS_TIME);//周一,美國和歐洲習慣把周日當作每周的第一天,故周一為2 break; case 3: dateObject.setTime(time-DateTool.TWO_DAYS_TIME); break; case 4: dateObject.setTime(time-DateTool.THREE_DAYS_TIME); break; case 5: dateObject.setTime(time-DateTool.FOUR_DAYS_TIME); break; case 6: dateObject.setTime(time-DateTool.FIVE_DAYS_TIME); break; case 7: dateObject.setTime(time-DateTool.SIX_DAYS_TIME); break; default: dateObject.setTime(time-DateTool.SEVEN_DAYS_TIME); break; } String date = dateFormater.format(dateObject); return date; }}