根據某個日期獲得其上月,上季,上周的起止日期

來源:互聯網
上載者:User
因領導懶惰,頁面查詢條件中的日期項懶得手工輸入,查詢條件變作上月,上季,上周,故討教多方,寫了一個工具類,以作日後參考.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;    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.