学习资源javaJava Web

Java开发-有关时间的工具类集合

2017-07-02  本文已影响203人  奋斗的蛐蛐

简介

在开发的过程中,会遇到各种各样的时间处理,在我工作的过程中,和我的同事总结了一下常用的分享个大家,希望大家在使用的时候会更加方便。具体的介绍我会写在代码中就不一一给大家介绍了,希望大家喜欢。

/**
* 日期的工具类
*/
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

public class DateUtils extends org.apache.commons.lang3.time.DateUtils {

    public static final String DATE_FORMAT_STR = "yyyy-MM-dd HH:mm:ss";
    public static final String DATE_FORMAT_PAR = "yyyy-MM-dd";

    public static boolean isDate(String s) {
        return parseDate(s) != null;
    }

    public static String getCurrentDate() {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        String sDate = sdf.format(new Date());
        return sDate;
    }

    // 传入一个时间,获取当前时间的获取年份
    public static int getYear(String date) {
        return getYear(getDateFromString(date));
    }

    // 传入一个时间,获取当前时间的获取年份
    public static int getYear(Date date) {
        Calendar cal = new GregorianCalendar();
        cal.setTime(date);
        return cal.get(Calendar.YEAR);
    }

    // 传入一个字符串格式的时间,获取当前时间的获取月份
    public static int getMonth(String date) {
        return Integer.parseInt(date.split("-")[1]);
    }

    // 传入一个时间,获取当前时间的获取月份
    public static int getMonth(Date date) {
        Calendar cal = new GregorianCalendar();
        cal.setTime(date);
        return cal.get(Calendar.MONTH) + 1;
    }

    // 获取日
    public static int getDayOfMonth(String date) {
        return getDayOfMonth(getDateFromString(date));
    }

    // 获取日
    public static int getDayOfMonth(Date date) {
        Calendar cal = new GregorianCalendar();
        cal.setTime(date);
        return cal.get(Calendar.DAY_OF_MONTH);
    }
    
    // 获取小时
    public static int getHourOfDay(Date date) {
        Calendar cal = new GregorianCalendar();
        cal.setTime(date);
        return cal.get(Calendar.HOUR_OF_DAY);
    }

    // 获取今天是周几
    public static Integer getDayOfWeek(String date) {
        return getDayOfWeek(getDateFromString(date));
    }

    // 获取今天是周几
    public static Integer getDayOfWeek(Date date) {
        Calendar cal = new GregorianCalendar();
        cal.setTime(date);
        return cal.get(Calendar.DAY_OF_WEEK);
    }

    
    
    /**
     * 显示年月日 格式yyyy-MM-dd
     * 
     * @param dateStr时间字符串
     *            修改内容:增加dateStr为空值处理
     * @return
     */
    public static Date getDateFromString(String dateStr) {
        if (dateStr == null || "null".equals(dateStr) || "".equals(dateStr)) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        try {
            return sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 将"yyyy-MM-dd"格式字符串转成java.util.Date日期
     * 
     * @param str
     * @return
     * @throws ParseException
     */
    static public java.util.Date getUtilDateFromStr(String str)
            throws ParseException {
        if (null == str || "".equals(str)) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        return sdf.parse(str);
    }

    /**
     * 获得当前之前/之后天数的日期,格式为yyyy-mm-dd
     * 
     * @param dateNum
     *            当前日期之前/之后天数
     * @return 相应日期
     */
    public static Date getDateFromString(int dateNum) {
        Date temp = new Date();
        String dateStr = temp.getYear() + 1900 + "-" + (temp.getMonth() + 1) + "-" + (temp.getDate() + dateNum);
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
            return sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    
    public static Date getDateFromString2(int dateNum) {
        Date temp = new Date();
        String dateStr = temp.getYear() + 1900 + "-" + (temp.getMonth() + 1 + dateNum) + "-" + (temp.getDate())+ " "+temp.getHours() +":"+temp.getMinutes()+":"+temp.getSeconds();
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_STR);
            return sdf.parse(dateStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        Date time = DateUtils.getDateFromString2(3);
        System.err.println(time.toLocaleString());
        
    }
    //修改内容:增加date为空值处理
    public static String getStringDate(Date date) {
        if (date == null) {
            return null;
        }
        Calendar cal = new GregorianCalendar();
        cal.setTime(date);
        return new StringBuffer().append(cal.get(Calendar.YEAR)).append("-")
                .append((cal.get(Calendar.MONTH) + 1)).append("-").append(
                        cal.get(Calendar.DAY_OF_MONTH)).toString();
    }

    // 获取今天年月日时 YYYY-MM-DD:HH
    public static String getDayandhour(Date date) {
        Calendar cal = new GregorianCalendar();
        cal.setTime(date);
        return new StringBuffer().append(cal.get(Calendar.YEAR)).append("-")
                .append((cal.get(Calendar.MONTH) + 1)).append("-").append(
                        cal.get(Calendar.DAY_OF_MONTH)).append(" : ").append(
                        cal.get(Calendar.HOUR_OF_DAY)).toString();
    }

    // 计算两个日期之间的天数
    //增加date为空值处理
    public static String getStringDateFormat(Date date) {
        if (date == null) {
            return null;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        return sdf.format(date);
    }

    public static int countDays(Date begin, Date later) {
        if (begin == null || later == null)
            return -1;
        return (int) ((later.getTime() - begin.getTime()) / 86400000);
    }

    /**
     * 换算成以年为单位
     * 
     * days/365年
     * 
     * @param days
     *            <天数>
     * @return
     */
    public static double leavingsYear(int days) {
        return FormatUtil.round(days / 365.0D, 4);
    }

    /**
     * 计算剩余年限(计闰日)
     * 
     * @param begin
     *            <开始日期>
     * @param end
     *            <截止日期>
     * @return
     */
    public static double leavingsYear(Date begin, Date end) {
        if (begin == null || end == null || end.before(begin))
            return 0;
        int days = DateUtils.countDayByDate(begin, end);
        return DateUtils.leavingsYear(days);
    }

    // type 类型:0 计闰日 1不计闰日
    public static double leavingsYear(Date begin, Date end, int type) {
        if (begin == null || end == null || end.before(begin))
            return 0;
        int days = DateUtils.countDayByDate(begin, end, type);
        return DateUtils.leavingsYear(days);
    }

    /**
     * 将指定日期增量后得到一个新的日期
     * 
     * @param type
     *            增量类型,Calendar.DAY_OF_MONTH、Calendar.MONTH等
     * @param num
     *            增量的数量值
     */
    public static Date dateAdd(Date date, int type, int num) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        cal.add(type, num);
        return cal.getTime();
    }

    /**
     * 将指定日期减量后得到一个新的日期
     * 
     * @param type
     *            减量类型,Calendar.DAY_OF_MONTH、Calendar.MONTH等
     * @param num
     *            减量的数量值
     */
    public static Date dateSub(Date date, int type, int num) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        int value = cal.get(type) - num;
        cal.set(Calendar.DAY_OF_MONTH, value);
        return cal.getTime();
    }

    /**
     * 判断两个日期之间差了多少天,不足一天,则按一天计算,即20.01天也算21天
     */
    public static int dateDiff(Date date1, Date date2) {
        if (date1 == null || date2 == null)
            return 0;
        long baseNum = 3600 * 1000 * 24;
        long absNum = Math.abs(date1.getTime() - date2.getTime());
        long mod = absNum % baseNum;
        int num = (int) (absNum / baseNum);
        if (mod > 0)
            num++;
        return num;
    }

    /**
     * 获得当前日期天内的毫秒值
     * 
     * @param long
     */
    public static long getCurrDayTimeMillis(Date currDate) {
        long currTime = 0;
        if (currDate == null)
            return currTime;
        Calendar cal = Calendar.getInstance();
        cal.setTime(currDate);
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        int minu = cal.get(Calendar.MINUTE);
        int sec = cal.get(Calendar.SECOND);
        currTime = (hour * 60 * 60 + minu * 60 + sec) * 1000;
        return currTime;
    }

    /**
     * 根据字符型的年、月、日参数,转换成相应的日期
     * 如果年、月、日 三个参数当中有一个是无效的,则返回空值,
     * 需要注意的是,这里无效是指输入的字符串无法转换成整型数值。
     */
    public static Date parseDate(String year, String month, String day) {
        int intYear = 0, intMonth = 0, intDay = 0;
        String s = "";
        try {
            intYear = Integer.parseInt(year);
            s = month;
            if (s.length() > 1 && s.substring(0, 1).equals("0"))
                s = s.substring(1);
            intMonth = Integer.parseInt(s);
            s = day;
            if (s.length() > 1 && s.substring(0, 1).equals("0"))
                s = s.substring(1);
            intDay = Integer.parseInt(s);
        } catch (Exception ex) {
            return null;
        }
        return parseDate(intYear, intMonth, intDay);
    }

    /**
     * 根据字符型的年、月、日参数,转换成相应的日期,
     * 此方法对于 int month , int day 参数范围不做限制,
     * 比如设置month为15,day为34等,系统可以直接将超出的部分累加到下一年或下一月。
     */
    public static Date parseDate(int year, int month, int day) {
        Calendar cal = Calendar.getInstance();
        cal.set(year, month - 1, day);
        return cal.getTime();
    }

    /**
     * 与Date parseDate(int year,int month,int day)方法类似,只是多了时、分、秒三个参数
     */
    public static Date parseDate(int year, int month, int day, int hour,
            int min, int sec) {
        Calendar cal = Calendar.getInstance();
        cal.set(year, month - 1, day, hour, min, sec);
        return cal.getTime();
    }

    /**
     * 将指定字符串按固定格式转换为日期格式,当前兼容的格式如下:<br>
     * 1、eg. 1978-12-21 14:21:25<br>
     * 2、eg. 12/21/1978 14:21:35<br>
     * 如果当前字符串格式违例,则返回空值
     */

    public static Date parseDate(String strDate, String format) {
        Date now = null;
        try {
            now = getDate(strDate, format);
        } catch (Exception ex) {
            now = null;
        }
        return now;
    }

    private static Date getDate(String strDate, String format) throws Exception {
        SimpleDateFormat formator = new SimpleDateFormat(format);
        return formator.parse(strDate);
    }

    public static Date parseDate(String strDate) {
        Date now = null;
        try {
            now = getDate(strDate, DATE_FORMAT_STR);
        } catch (Exception ex) {
            now = null;
        }
        if (now == null) {
            try {
                now = getDate(strDate, DATE_FORMAT_PAR);
            } catch (Exception e) {
                now = null;
            }
        }
        if (now == null) {
            try {
                SimpleDateFormat f = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
                now = f.parse(strDate);
            } catch (Exception e) {
                now = null;
            }
        }
        if (now == null) {
            try {
                SimpleDateFormat f = new SimpleDateFormat("MM/dd/yyyy");
                now = f.parse(strDate);
            } catch (Exception e) {
                now = null;
            }
        }
        return now;
    }

    public static String shortDateForChina(Date date) {
        String r = "";
        SimpleDateFormat formator = new SimpleDateFormat("yyyy年MM月dd日");
        try {
            r = formator.format(date);
        } catch (Exception ex) {
            r = formator.format(new Date());
        }
        return r;
    }

    /**
     * 将日期按无格式方式输出,即:按yyyyMMddHHmmss这样的格式输出,此方法很少用到
     */
    public static String fullTimeNoFormat(Date date) {
        if (date == null)
            return "";
        String r = "";
        SimpleDateFormat formator = new SimpleDateFormat("yyyyMMddHHmmss");
        try {
            r = formator.format(date);
        } catch (Exception ex) {
            r = "";
        }
        return r;
    }

    /**
     * 将日期按指定格式输出,日期格式在config.porperties文件中设定,如果没有设定,则以'yyyy-MM-dd HH:mm:ss',<br>
     * 如果日期的时间部分全为0,则不显示
     */
    public static String fullTime(Date date) {
        if (date == null)
            return "";
        String format = DATE_FORMAT_STR;
        String s = "";
        SimpleDateFormat formator = new SimpleDateFormat(format);
        try {
            s = formator.format(date);
        } catch (Exception ex) {
            s = "";
        }
        if (s != null && s.length() > 11) {
            String sTime = s.substring(11);
            if (sTime.equals("00:00:00"))
                return s.substring(0, 10);
        }
        return s;
    }

    /**
     * 日期格式在config.porperties文件中设定,需要按 'yy/MM/dd' 格式显示,则获得'yy/MM/dd',<br>
     * 如果日期的时间部分全为0,则不显示 2008-11-24 format 要输出的时间格式,eavic 信息的是 M/d 如3/1 11/5
     * 11/11
     */
    public static String fullTimeByFormat(Date date, String format) {
        if (date == null)
            return "";
        if (format == null || format.trim().equals(""))
            format = "yyyy/MM/dd";
        String s = "";
        SimpleDateFormat formator = new SimpleDateFormat(format);
        try {
            s = formator.format(date);
        } catch (Exception ex) {
            s = "";
        }
        if (s != null && s.length() > 11) {
            // String sTime = s.substring(11);
            s.substring(0, 8);
        }
        return s;
    }

    public static String fullTime() {
        return fullTime(new Date());
    }

    public static String fullTime(long date) {
        return fullTime(new Date(date));
    }

    /**
     * 将日期按指定格式输出,但仅输出日期部分,不显示时间,其他规则与fullTime(Date date , Locale area)一致
     */
    public static String shortDate(Date date) {
        String s = fullTime(date);
        if (s == null || s.equals(""))
            return s;
        return s.substring(0, 10);
    }

    public static String shortDate() {
        return shortDate(new Date());
    }

    public static String shortDate(long date) {
        return shortDate(new Date(date));
    }

    /**
     * 显示日期的时间部分
     */
    public static String shortTime(Date date) {
        if (date == null)
            return "";
        String s = "";
        SimpleDateFormat formator = new SimpleDateFormat("HH:mm:ss");
        try {
            s = formator.format(date);
        } catch (Exception ex) {
            s = "";
        }
        return s;
    }



    /**
     * 显示当前HH:mm:ss
     */
    public static String shortTime() {
        return shortTime(new Date());
    }

    /**
     * 显示当前HH:mm:ss
     * 
     * @param date
     *            传入当前时间
     */
    public static String shortTime(long date) {
        return shortTime(new Date(date));
    }

    /**
     * 根据月份数值得到mon+1月前的总天数,如mon=1,即得到2月之前的天数
     * 
     * @param mon
     *            月份数值
     * @return 返回的计算天数
     */
    public static int dayCountByMonth(int mon) {
        int ret = 0;
        switch (mon) {
        case 1:
            ret = 31;
            break;
        case 2:
            ret = 31 + 28;
            break;
        case 3:
            ret = 31 + 28 + 31;
            break;
        case 4:
            ret = 31 + 28 + 31 + 30;
            break;
        case 5:
            ret = 31 + 28 + 31 + 30 + 31;
            break;
        case 6:
            ret = 31 + 28 + 31 + 30 + 31 + 30;
            break;
        case 7:
            ret = 31 + 28 + 31 + 30 + 31 + 30 + 31;
            break;
        case 8:
            ret = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31;
            break;
        case 9:
            ret = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30;
            break;
        case 10:
            ret = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31;
            break;
        case 11:
            ret = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30;
            break;
        }
        return ret;
    }

    /**
     * 计算两个日期之间的天数差,扣除闰日
     * 
     * @param t_i
     *            输入日期i
     * @param t
     *            输入日期
     * @return 输入日期i与输入日期t的天数差
     */
    @SuppressWarnings("deprecation")
    public static int countDayNumberNoSpecialDay(Date t_i, Date t) {
        int year = t.getYear();
        int mon = t.getMonth();
        int date = t.getDate();
        int dayCount = dayCountByMonth(mon) + date;
        int year_i = t_i.getYear();
        int mon_i = t_i.getMonth();
        int date_i = t_i.getDate();
        int dayCount_i = dayCountByMonth(mon_i) + date_i;
        return (year_i - year) * 365 + dayCount_i - dayCount;
    }

    /**
     * 根据当前日期获得前一年日期的间隔天数(365,366)
     * 
     * @param countDate
     *            当前日期
     * @param n
     *            前N年的年实际天数
     * @return 365/366
     */
    @SuppressWarnings("deprecation")
    public static long dayNumberBeyond(Date countDate, int n) {
        Date beyondDate = new Date(0);
        beyondDate.setYear(countDate.getYear() - n);
        beyondDate.setMonth(countDate.getMonth());
        beyondDate.setDate(countDate.getDate());
        beyondDate.setHours(0);
        beyondDate.setMinutes(0);
        beyondDate.setSeconds(0);
        long ret = 0;
        ret = (countDate.getTime() - beyondDate.getTime()) / (1000 * 3600 * 24);
        return ret;
    }

    /**
     * 判断是否是闰年
     * 
     * @param year
     *            要判断的年数
     */
    public static boolean isLeapYear(int year) {
        return ((year % 400 == 0) || ((year % 4 == 0) && (!(year % 100 == 0)))) ? true
                : false;
    }

    /**
     * 判断当年有多少天 如果是闰年 返回366天 否则返回355
     * 
     * @param year
     *            要判断的年数
     * @return 当年的天数
     */

    public static int getDaysFromYear(int year) {
        return isLeapYear(year) ? 366 : 365;
    }

    /**
     * 计算两个日期之间的天数(计闰日)
     * 
     * @param begin
     *            开始的日期 later结束的日期
     * @return 天数(可以为负数)
     */
    public static int countDayByDate(Date begin, Date later) {
        return (int) ((later.getTime() - begin.getTime()) / (24 * 3600 * 1000));
    }

    /**
     * 计算两个日期之间的天数
     * 
     * @param begin
     *            开始的日期
     * @param end
     *            结束的日期
     * @param type
     *            类型:0 计闰日;1不计闰日
     * @return 天数(可以为负数)
     */
    public static int countDayByDate(Date begin, Date end, int type) {
        int countDay = 0;

        if (type == 0) {
            countDay = countDayByDate(begin, end);
        } else {
            countDay = countDayNumberNoSpecialDay(end, begin);
        }

        return countDay;
    }

    /**
     * 计算指定年的月份的天数
     * 
     * @param year
     *            年 month 月
     * @return 天数 如果传入的月不合法则返回-1
     */
    public static int getDaysFromYM(int year, int month) {
        if (month >= 13 || month < 0) {
            return -1;
        }
        int iReturn = 0;
        switch (month) {

        case 2:
            iReturn = isLeapYear(year) ? 29 : 28;
        case 4:
        case 6:
        case 8:
        case 10:
            iReturn = 30;
        default:
            iReturn = 31;
        }
        return iReturn;
    }

    /**
     * 计算指定的日期之前的天数
     * 
     * @param date
     *            日期 days 天数
     * @return 指定日期
     */
    public static Date getAfterDate(Date date, int days) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR)
                - days);
        return calendar.getTime();
    }

    /**
     * 判断是否是同天
     * 
     * @param dateOne
     * @param dateTwo
     * @return
     */
    public static boolean compare(Date dateOne, Date dateTwo) {
        if (dateOne == null || dateTwo == null)
            return false;
        return DateUtils.getYear(dateOne) == DateUtils.getYear(dateTwo)
                && DateUtils.getMonth(dateOne) == DateUtils.getMonth(dateTwo)
                && DateUtils.getDayOfMonth(dateOne) == DateUtils
                        .getDayOfMonth(dateTwo);
    }
    
    /**
     * 判断是否是同天同小时
     * 
     * @param dateOne
     * @param dateTwo
     * @return
     */
    public static boolean compareWithHour(Date dateOne, Date dateTwo) {
        return DateUtils.getYear(dateOne) == DateUtils.getYear(dateTwo)
                && DateUtils.getMonth(dateOne) == DateUtils.getMonth(dateTwo)
                && DateUtils.getDayOfMonth(dateOne) == DateUtils.getDayOfMonth(dateTwo)
                && DateUtils.getHourOfDay(dateOne) == DateUtils.getHourOfDay(dateTwo);
    }
    
    public static String getEndDate(List<Date> dList) {
        if (dList.size() == 1) {
            return getStringDate(dList.get(0));
        } else if (dList.size() < 1) {
            return "";
        }

        Collections.sort(dList, new Comparator<Date>() {

            public int compare(Date d1, Date d2) {

                return d1.compareTo(d2);
            }

        });
        return getStringDate(dList.get(dList.size() - 1));
    }

    /**
     * 将短时间格式字符串yyyy-MM-dd转换为时间
     * 
     * @param strDate
     * @return
     */
    public static Date strToDate(String strDate) {
        ParsePosition pos = new ParsePosition(0);
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        Date strtodate = sdf.parse(strDate, pos);
        return strtodate;
    }

    // 得到一个时间延后或前移几天的时间
    public static String getCountedDay(String strDate, String delay) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
            String mdate = "";
            Date d = strToDate(strDate);
            long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60;
            d.setTime(myTime * 1000);
            mdate = sdf.format(d);
            return mdate;
        } catch (Exception e) {
            return "";
        }
    }

    // 比较两个日期
    public static int compareTwoDate(String fromDate, String toDate) {
        try {
            Date fDate = strToDate(fromDate);
            Date tDate = strToDate(toDate);
            if (fDate.getTime() > tDate.getTime()) {
                return 1;
            } else if (fDate.getTime() < tDate.getTime()) {
                return -1;
            } else {
                return 0;
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
        return 0;
    }

    // 得到两个日期之间的所有天的列表
    public static List<String> getDayListOfTwoDate(String fromDate,
            String toDate) {
        List<String> daysList = new ArrayList<String>();
        String startDate = fromDate;
        String endDate = toDate;
        if (compareTwoDate(fromDate, toDate) > 0) {
            startDate = toDate;
            endDate = fromDate;
        }
        daysList.add(startDate);
        String nextDay = getCountedDay(startDate, "1");
        while (compareTwoDate(nextDay, endDate) <= 0) {
            daysList.add(nextDay);
            nextDay = getCountedDay(nextDay, "1");
        }
        return daysList;
    }

    // 获得给定日期字符串的 -- "该周的日期"
    public static String getDayOFWeek(String strDate, String weekDay) {
        Date dd = strToDate(strDate);
        Calendar c = Calendar.getInstance();
        c.setTime(dd);
        if (weekDay.equals("1")) {// 返回星期一所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        } else if (weekDay.equals("2")) {// 返回星期二所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
        } else if (weekDay.equals("3")) {// 返回星期三所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
        } else if (weekDay.equals("4")) {// 返回星期四所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
        } else if (weekDay.equals("5")) {// 返回星期五所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
        } else if (weekDay.equals("6")) {// 返回星期六所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        } else if (weekDay.equals("7")) {// 返回中国星期日所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
            c.add(GregorianCalendar.DATE, 1);
        } else if (weekDay.equals("0")) {// 返回西方星期日所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        }
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        return sdf.format(c.getTime());
    }

    // 得到一个时间延后或前移几周的时间
    public static String getCountedWeek(String strDate, String delay) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
            Date dd = strToDate(strDate);
            Calendar currentDate = Calendar.getInstance();
            currentDate.setTime(dd);
            currentDate.add(Calendar.WEDNESDAY, Integer.parseInt(delay));
            return sdf.format(currentDate.getTime());
        } catch (Exception e) {
            return "";
        }
    }

    // 得到两个日期之间的所有周几的列表
    public static List<String> getWeekDayListOfTwoDate(String fromDate,
            String toDate, String weekDay) {
        List<String> daysList = new ArrayList<String>();
        String startDate = fromDate;
        String endDate = toDate;
        if (compareTwoDate(fromDate, toDate) > 0) {
            startDate = toDate;
            endDate = fromDate;
        }
        String startWeekDay = getDayOFWeek(startDate, weekDay);
        String endWeekDay = getDayOFWeek(endDate, weekDay);
        daysList.add(startWeekDay);
        String nextWeekDay = getCountedWeek(startWeekDay, "1");
        while (compareTwoDate(nextWeekDay, endWeekDay) <= 0) {
            daysList.add(nextWeekDay);
            nextWeekDay = getCountedWeek(nextWeekDay, "1");
        }
        return daysList;
    }

    // 获取给定日期字符串的月第一天
    public static String getFirstDayOfMonth(String strDate) {
        Date dd = strToDate(strDate);
        Calendar c = Calendar.getInstance();
        c.setTime(dd);
        c.set(Calendar.DATE, 1);
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        return sdf.format(c.getTime());
    }

    // 得到一个时间延后或前移几月的时间
    public static String getCountedMonth(String strDate, String delay) {
        try {
            Date dd = strToDate(strDate);
            Calendar currentDate = Calendar.getInstance();
            currentDate.setTime(dd);
            currentDate.add(Calendar.MONDAY, Integer.parseInt(delay));
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
            return sdf.format(currentDate.getTime());
        } catch (Exception e) {
            return "";
        }
    }

    // 得到两个日期之间的所有月初的列表
    public static List<String> getFirstDayListOfMonthInTwoDate(String fromDate,
            String toDate) {
        List<String> daysList = new ArrayList<String>();
        String startDate = fromDate;
        String endDate = toDate;
        if (compareTwoDate(fromDate, toDate) > 0) {
            startDate = toDate;
            endDate = fromDate;
        }
        String startMonthDay = getFirstDayOfMonth(startDate);
        String endMonthDay = getFirstDayOfMonth(endDate);
        daysList.add(startMonthDay);
        String nextMonthDay = getCountedMonth(startMonthDay, "1");
        while (compareTwoDate(nextMonthDay, endMonthDay) <= 0) {
            daysList.add(nextMonthDay);
            nextMonthDay = getCountedMonth(nextMonthDay, "1");
        }
        return daysList;
    }

    // 获取给定日期字符串的月最后一天
    public static String getLastDayOfMonth(String strDate) {
        Date dd = strToDate(strDate);
        Calendar lastDate = Calendar.getInstance();
        lastDate.setTime(dd);
        lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
        lastDate.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号
        lastDate.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        return sdf.format(lastDate.getTime());
    }

    // 获得季度
    public static int getIntSeasonOfYear(String strDate) {
        int month = getMonth(strDate);
        int season = 1;
        if ((month >= 1) && (month <= 3)) {
            season = 1;
        }
        if ((month >= 4) && (month <= 6)) {
            season = 2;
        }
        if ((month >= 7) && (month <= 9)) {
            season = 3;
        }
        if ((month >= 10) && (month <= 12)) {
            season = 4;
        }
        return season;
    }

    // 获得给定日期字符串的季度第一天
    public static String getFirstDayOfSeason(String strDate) {
        String array[][] = { { "01", "02", "03" }, { "04", "05", "06" },
                { "07", "08", "09" }, { "10", "11", "12" } };
        int years = getYear(strDate);
        int season = getIntSeasonOfYear(strDate);
        String start_month = array[season - 1][0];
        return years + "-" + start_month + "-01";
    }

    // 得到两个日期之间的所有季初的列表
    public static List<String> getFirstDayListOfSeasonInTwoDate(
            String fromDate, String toDate) {
        List<String> daysList = new ArrayList<String>();
        String startDate = fromDate;
        String endDate = toDate;
        if (compareTwoDate(fromDate, toDate) > 0) {
            startDate = toDate;
            endDate = fromDate;
        }
        String startMonthDay = getFirstDayOfSeason(startDate);
        String endMonthDay = getFirstDayOfSeason(endDate);
        daysList.add(startMonthDay);
        String nextMonthDay = getCountedMonth(startMonthDay, "3");
        while (compareTwoDate(nextMonthDay, endMonthDay) <= 0) {
            daysList.add(nextMonthDay);
            nextMonthDay = getCountedMonth(nextMonthDay, "3");
        }
        return daysList;
    }

    // 获得给定日期字符串的季度最后一天
    public static String getLastDayOfSeason(String strDate) {
        String array[][] = { { "01", "02", "03" }, { "04", "05", "06" },
                { "07", "08", "09" }, { "10", "11", "12" } };
        int years = getYear(strDate);
        int season = getIntSeasonOfYear(strDate);
        String end_month = array[season - 1][2];
        return getLastDayOfMonth(years + "-" + end_month + "-01");
    }

    // 得到一个时间延后或前移几年的时间
    public static String getCountedYear(String strDate, String delay) {
        try {
            Date dd = strToDate(strDate);
            Calendar currentDate = Calendar.getInstance();
            currentDate.setTime(dd);
            currentDate.add(Calendar.YEAR, Integer.parseInt(delay));
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
            return sdf.format(currentDate.getTime());
        } catch (Exception e) {
            return "";
        }
    }

    // 获取给定日期字符串的年第一天
    public static String getFirstDayOfYear(String strDate) {
        int years = getYear(strDate);
        return years + "-01-01";
    }

    // 得到两个日期之间的所有年初的列表
    public static List<String> getFirstDayListOfYearInTwoDate(String fromDate,
            String toDate) {
        List<String> daysList = new ArrayList<String>();
        String startDate = fromDate;
        String endDate = toDate;
        if (compareTwoDate(fromDate, toDate) > 0) {
            startDate = toDate;
            endDate = fromDate;
        }
        String startYearDay = getFirstDayOfYear(startDate);
        String endYearDay = getFirstDayOfYear(endDate);
        daysList.add(startYearDay);
        String nextYearDay = getCountedYear(startYearDay, "1");
        while (compareTwoDate(nextYearDay, endYearDay) <= 0) {
            daysList.add(getFirstDayOfYear(nextYearDay));
            nextYearDay = getCountedYear(nextYearDay, "1");
        }
        return daysList;
    }

    // 获取给定日期字符串的年最后一天
    public static String getLastDayOfYear(String strDate) {
        int years = getYear(strDate);
        return years + "-12-31";
    }

    // 
    public static String getDateUtilCurrentDate() {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        String sDate = sdf.format(new Date());
        return sDate;
    }

    // 得到一个时间延后或前移几月的时间 
    public static String getDateUtilCountedMonth(String strDate, String delay) {
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
            Date dd = strToDate(strDate);
            Calendar currentDate = Calendar.getInstance();
            currentDate.setTime(dd);
            currentDate.add(Calendar.MONDAY, Integer.parseInt(delay));
            return sdf.format(currentDate.getTime());
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    // 获取给定日期字符串的月第一天 
    public static String getDateUtilFirstDayOfMonth(String strDate) {
        Date dd = strToDate(strDate);
        Calendar c = Calendar.getInstance();
        c.setTime(dd);
        c.set(Calendar.DATE, 1);
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        return sdf.format(c.getTime());
    }

    // 获取给定日期字符串的月最后一天
    public static String getDateUtilLastDayOfMonth(String strDate) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        Date dd = strToDate(strDate);
        Calendar lastDate = Calendar.getInstance();
        lastDate.setTime(dd);
        lastDate.set(Calendar.DATE, 1);// 设为当前月的1号
        lastDate.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号
        lastDate.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天
        return sdf.format(lastDate.getTime());
    }

    //
    public static String getDateUtilStrDate(String strDate) {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        return sdf.format(strToDate(strDate));
    }

    // 得到两个日期之间的所有周几的列表 
    public static List<String> getDateUtilWeekDayListOfTwoDate(String fromDate,
            String toDate, String weekDay) {
        List<String> daysList = new ArrayList<String>();
        String startDate = fromDate;
        String endDate = toDate;
        if (compareTwoDate(fromDate, toDate) > 0) {
            startDate = toDate;
            endDate = fromDate;
        }
        String startWeekDay = getDayOFWeek(startDate, weekDay);
        String endWeekDay = getDayOFWeek(endDate, weekDay);
        daysList.add(startWeekDay);
        String nextWeekDay = getCountedWeek(startWeekDay, "1");
        while (compareTwoDate(nextWeekDay, endWeekDay) <= 0) {
            daysList.add(nextWeekDay);
            nextWeekDay = getCountedWeek(nextWeekDay, "1");
        }
        return daysList;
    }

    // 获得给定日期字符串的 -- "该周的日期" 
    public static String getDateUtilDayOFWeek(String strDate, String weekDay) {
        Date dd = strToDate(strDate);
        Calendar c = Calendar.getInstance();
        c.setTime(dd);
        if (weekDay.equals("1")) {// 返回星期一所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
        } else if (weekDay.equals("2")) {// 返回星期二所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
        } else if (weekDay.equals("3")) {// 返回星期三所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
        } else if (weekDay.equals("4")) {// 返回星期四所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
        } else if (weekDay.equals("5")) {// 返回星期五所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
        } else if (weekDay.equals("6")) {// 返回星期六所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
        } else if (weekDay.equals("7")) {// 返回中国星期日所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
            c.add(GregorianCalendar.DATE, 1);
        } else if (weekDay.equals("0")) {// 返回西方星期日所在的日期
            c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
        }
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        return sdf.format(c.getTime());
    }

    // 得到两个日期之间的所有月初的列表 
    public static List<String> getDateUtilFirstDayListOfMonthInTwoDate(
            String fromDate, String toDate) {
        List<String> daysList = new ArrayList<String>();
        String startDate = fromDate;
        String endDate = toDate;
        if (compareTwoDate(fromDate, toDate) > 0) {
            startDate = toDate;
            endDate = fromDate;
        }
        String startMonthDay = getFirstDayOfMonth(startDate);
        String endMonthDay = getFirstDayOfMonth(endDate);
        daysList.add(startMonthDay);
        String nextMonthDay = getCountedMonth(startMonthDay, "1");
        while (compareTwoDate(nextMonthDay, endMonthDay) <= 0) {
            daysList.add(nextMonthDay);
            nextMonthDay = getCountedMonth(nextMonthDay, "1");
        }
        return daysList;
    }

    // 得到两个日期之间的所有季初的列表 
    public static List<String> getDateUtilFirstDayListOfSeasonInTwoDate(
            String fromDate, String toDate) {
        List<String> daysList = new ArrayList<String>();
        String startDate = fromDate;
        String endDate = toDate;
        if (compareTwoDate(fromDate, toDate) > 0) {
            startDate = toDate;
            endDate = fromDate;
        }
        String startMonthDay = getFirstDayOfSeason(startDate);
        String endMonthDay = getFirstDayOfSeason(endDate);
        daysList.add(startMonthDay);
        String nextMonthDay = getCountedMonth(startMonthDay, "3");
        while (compareTwoDate(nextMonthDay, endMonthDay) <= 0) {
            daysList.add(nextMonthDay);
            nextMonthDay = getCountedMonth(nextMonthDay, "3");
        }
        return daysList;
    }

    // 获得给定日期字符串的季度最后一天 
    public static String getDateUtilLastDayOfSeason(String strDate) {
        String array[][] = { { "01", "02", "03" }, { "04", "05", "06" },
                { "07", "08", "09" }, { "10", "11", "12" } };
        int years = getYear(strDate);
        int season = getIntSeasonOfYear(strDate);
        String end_month = array[season - 1][2];
        return getLastDayOfMonth(years + "-" + end_month + "-01");
    }

    // 得到两个日期之间的所有年初的列表 
    public static List<String> getDateUtilFirstDayListOfYearInTwoDate(
            String fromDate, String toDate) {
        List<String> daysList = new ArrayList<String>();
        String startDate = fromDate;
        String endDate = toDate;
        if (compareTwoDate(fromDate, toDate) > 0) {
            startDate = toDate;
            endDate = fromDate;
        }
        String startYearDay = getFirstDayOfYear(startDate);
        String endYearDay = getFirstDayOfYear(endDate);
        daysList.add(startYearDay);
        String nextYearDay = getCountedYear(startYearDay, "1");
        while (compareTwoDate(nextYearDay, endYearDay) <= 0) {
            daysList.add(getFirstDayOfYear(nextYearDay));
            nextYearDay = getCountedYear(nextYearDay, "1");
        }
        return daysList;
    }

    // 获取给定日期字符串的年最后一天 
    public static String getDateUtilLastDayOfYear(String strDate) {
        int years = getYear(strDate);
        return years + "-12-31";
    }

    /**
     * 日期格式转换,用于判断条件只到月份,形如:1990-8 转换成1990-08 
     */
    public static String convertStringFromDate(String target) {
        String dateString = "";
        Date date;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
            date = sdf.parse(target);
            int yearString = date.getYear() + 1900;
            int moString = date.getMonth() + 1;
            if (moString < 10) {
                dateString = yearString + "-0" + moString;
            } else {
                dateString = yearString + "-" + moString;
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return dateString;
    }

    /**
     * 用于页面显示格式为XXXX年XX月 
     * 
     */
    public static String getYearAndMonth(String target) {
        String dateString = "";
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM");
        Date date;
        try {
            date = simpleDateFormat.parse(target);
            int yearString = date.getYear() + 1900;
            int moString = date.getMonth() + 1;
            if (moString < 10) {

                dateString = yearString + "年0" + moString + "月";
            } else
                dateString = yearString + "年" + moString + "月";
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return dateString;
    }

    // 
    public static String convertFormFromDateToString(Date target) {
        String dateString = "";
        if (target != null && !target.equals("")) {
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
            dateString = sdf.format(target);
        } else {
            dateString = "";
        }
        return dateString;
    }

    /**
     * 获取一年前今天的日期 
     */
    public static String getNowOfLastYear() {
        GregorianCalendar aGregorianCalendar = new GregorianCalendar();
        aGregorianCalendar.set(Calendar.YEAR, aGregorianCalendar.get(Calendar.YEAR) - 1);
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        String currentYearAndMonth = sdf.format(aGregorianCalendar.getTime());
        return currentYearAndMonth;
    }

    /**
     * 获取半年前的日期 
     */
    public static String getNowOfLastHalfYear() {
        GregorianCalendar aGregorianCalendar = new GregorianCalendar();
        aGregorianCalendar.set(Calendar.MONTH, aGregorianCalendar.get(Calendar.MONTH) - 6);
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        String currentYearAndMonth = sdf.format(aGregorianCalendar.getTime());
        return currentYearAndMonth;
    }

    /**
     * 获取一年前年份 
     */
    public static String getPrimaYear() {
        SimpleDateFormat aSimpleDateFormat = new SimpleDateFormat("yyyy");
        GregorianCalendar aGregorianCalendar = new GregorianCalendar();
        aGregorianCalendar.set(Calendar.YEAR, aGregorianCalendar
                .get(Calendar.YEAR) - 1);
        String currentYearAndMonth = aSimpleDateFormat
                .format(aGregorianCalendar.getTime());
        return currentYearAndMonth;
    }

    /**
     * 获取两年前年份 
     */
    public static String getPrimaTwoYear() {
        SimpleDateFormat aSimpleDateFormat = new SimpleDateFormat("yyyy");
        GregorianCalendar aGregorianCalendar = new GregorianCalendar();
        aGregorianCalendar.set(Calendar.YEAR, aGregorianCalendar
                .get(Calendar.YEAR) - 2);
        String currentYearAndMonth = aSimpleDateFormat
                .format(aGregorianCalendar.getTime());
        return currentYearAndMonth;
    }

    /**
     * 获取一月前的日期 
     */
    public static String getPrimaMonth() {
//      GregorianCalendar aGregorianCalendar = new GregorianCalendar();
//      aGregorianCalendar.set(Calendar.MONTH, aGregorianCalendar.get(Calendar.MONTH) - 1);
//      String currentYearAndMonth = sdf.format(aGregorianCalendar.getTime());
//      return currentYearAndMonth;
        
        SimpleDateFormat aSimpleDateFormat = new SimpleDateFormat(DATE_FORMAT_PAR);
        GregorianCalendar aGregorianCalendar = new GregorianCalendar();
        //aGregorianCalendar.set(Calendar.MONTH, aGregorianCalendar.get(Calendar.MONTH) - 1);
        aGregorianCalendar.add(GregorianCalendar.MONTH, -1);
        String currentYearAndMonth = aSimpleDateFormat.format(aGregorianCalendar.getTime());
        return currentYearAndMonth;
    }

    /**
     * 获取下个月的日期 
     */
    public static String getNextMonthDay() {
        GregorianCalendar aGregorianCalendar = new GregorianCalendar();
        aGregorianCalendar.set(Calendar.MONTH, aGregorianCalendar.get(Calendar.MONTH) + 1);
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        String currentYearAndMonth = sdf.format(aGregorianCalendar.getTime());
        return currentYearAndMonth;
    }

    /**
     * 获取下个周的日期
     */
    public static String getNextWeekDay() {
        GregorianCalendar aGregorianCalendar = new GregorianCalendar();
        aGregorianCalendar.set(Calendar.DATE, aGregorianCalendar.get(Calendar.DATE) + 7);
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        String currentYearAndMonth = sdf.format(aGregorianCalendar.getTime());
        return currentYearAndMonth;
    }

    /**
     * 获取当前日期
     */
    @Deprecated
    public static String getNowYear() {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
        String time = sdf.format(new Date());
        return time;
    }

    /**
     * 获取统计时间段开始日期
     */
    public static String getSecStartDate(String statisticsFREQUENCE,
            String beginDate) {
        if (statisticsFREQUENCE.equals("1")) {// 日
            return beginDate;
        }
        if (statisticsFREQUENCE.equals("2")) {// 周
            try {
                SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
                Date date = sdf.parse(beginDate);
                Calendar firstcalendar = Calendar.getInstance();
                firstcalendar.setTime(date);
                if (firstcalendar.get(Calendar.DAY_OF_WEEK) == 1) {
                    firstcalendar.add(Calendar.DATE, -6);
                } else {
                    firstcalendar.add(Calendar.DATE, 0 - firstcalendar.get(Calendar.DAY_OF_WEEK) + 2);
                }
                return sdf.format(firstcalendar.getTime());
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        if (statisticsFREQUENCE.equals("3")) {// 月
            return beginDate.substring(0, beginDate.lastIndexOf("-")) + "-01";
        }
        if (statisticsFREQUENCE.equals("4")) {// 季

            String beginDateMonth = beginDate.substring(
                    beginDate.indexOf("-") + 1, beginDate.lastIndexOf("-"));
            int month = Integer.parseInt(beginDateMonth);
            if (month == 1 || month == 2 || month == 3) {// 一季
                return beginDate.substring(0, 4) + "-01-01";
            }
            if (month == 4 || month == 5 || month == 6) {// 二季
                return beginDate.substring(0, 4) + "-04-01";
            }
            if (month == 7 || month == 8 || month == 9) {// 三季
                return beginDate.substring(0, 4) + "-07-01";
            }
            if (month == 10 || month == 11 || month == 12) {// 四季
                return beginDate.substring(0, 4) + "-10-01";
            }
        }
        if (statisticsFREQUENCE.equals("5")) {// 年
            return beginDate.substring(0, beginDate.indexOf("-")) + "-01-01";
        }
        return null;
    }

    /**
     * 获取统计时间段结束日期 
     */
    public static String getSecEndDate(String statisticsFREQUENCE,
            String endDate) {
        if (statisticsFREQUENCE.equals("1")) {// 日
            return endDate;
        }
        if (statisticsFREQUENCE.equals("2")) {// 周
            try {
                SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
                Date date = sdf.parse(endDate);
                Calendar lastcalendar = Calendar.getInstance();
                lastcalendar.setTime(date);
                if (lastcalendar.get(Calendar.DAY_OF_WEEK) != 1) {
                    lastcalendar.add(Calendar.DATE, 0 - lastcalendar.get(Calendar.DAY_OF_WEEK) + 8);
                }
                return sdf.format(lastcalendar.getTime());
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        if (statisticsFREQUENCE.equals("3")) {// 月
            try {
                SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_PAR);
                Date date = sdf.parse(endDate);
                Calendar calendar = Calendar.getInstance();
                calendar.setTime(date);
                int year = Integer.parseInt(endDate.substring(0, endDate
                        .indexOf("-")));
                int month = Integer.parseInt(endDate.substring(endDate
                        .indexOf("-") + 1, endDate.lastIndexOf("-")));
                calendar.set(year, month - 1, 1);
                int maxDayOfMonth = calendar
                        .getActualMaximum(Calendar.DAY_OF_MONTH);

                return endDate.substring(0, endDate.lastIndexOf("-")) + "-"
                        + String.valueOf(maxDayOfMonth);

            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        if (statisticsFREQUENCE.equals("4")) {// 季

            String endDateMonth = endDate.substring(endDate.indexOf("-") + 1,
                    endDate.lastIndexOf("-"));
            int month = Integer.parseInt(endDateMonth);
            if (month == 1 || month == 2 || month == 3) {// 一季
                return endDate.substring(0, 4) + "-03-31";
            }
            if (month == 4 || month == 5 || month == 6) {// 二季
                return endDate.substring(0, 4) + "-06-30";
            }
            if (month == 7 || month == 8 || month == 9) {// 三季
                return endDate.substring(0, 4) + "-09-30";
            }
            if (month == 10 || month == 11 || month == 12) {// 四季
                return endDate.substring(0, 4) + "-12-31";
            }
        }
        if (statisticsFREQUENCE.equals("5")) {// 月

            return endDate.substring(0, 4) + "-12-31";
        }
        return null;
    }

    /**
     * 获取上最近有数据的时间段开始日期
     */
    public static String getPriveSecBegin(String statisticsFREQUENCE,
            String endDate) {

        if (statisticsFREQUENCE.equals("1")) {// 日,往前算30日
            try {
                SimpleDateFormat formatter = new SimpleDateFormat(DATE_FORMAT_PAR);
                Date date = formatter.parse(endDate);
                Calendar lastcalendar = Calendar.getInstance();
                lastcalendar.setTime(date);
                lastcalendar.add(Calendar.DATE, -30);
                return formatter.format(lastcalendar.getTime());
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        if (statisticsFREQUENCE.equals("2")) {// 周,往前算21日,三周
            try {
                SimpleDateFormat formatter = new SimpleDateFormat(DATE_FORMAT_PAR);
                Date date = formatter.parse(endDate);
                Calendar lastcalendar = Calendar.getInstance();
                lastcalendar.setTime(date);
                lastcalendar.add(Calendar.DATE, -21);
                return formatter.format(lastcalendar.getTime());
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        if (statisticsFREQUENCE.equals("3")) {// 月,往前算一个月
            try {
                SimpleDateFormat formatter = new SimpleDateFormat(DATE_FORMAT_PAR);
                Date date = formatter.parse(endDate);
                Calendar lastcalendar = Calendar.getInstance();
                lastcalendar.setTime(date);
                lastcalendar.add(Calendar.MONTH, -1);
                return formatter.format(lastcalendar.getTime());
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        if (statisticsFREQUENCE.equals("4")) {// 季,往前算一季
            try {
                SimpleDateFormat formatter = new SimpleDateFormat(DATE_FORMAT_PAR);
                Date date = formatter.parse(endDate);
                Calendar lastcalendar = Calendar.getInstance();
                lastcalendar.setTime(date);
                lastcalendar.add(Calendar.MONTH, -3);
                return formatter.format(lastcalendar.getTime());
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        if (statisticsFREQUENCE.equals("5")) {// 年,往前算一年
            try {
                SimpleDateFormat formatter = new SimpleDateFormat(DATE_FORMAT_PAR);
                Date date = formatter.parse(endDate);
                Calendar lastcalendar = Calendar.getInstance();
                lastcalendar.setTime(date);
                lastcalendar.add(Calendar.YEAR, -1);
                return formatter.format(lastcalendar.getTime());
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    public static String getLastMonth() {
        SimpleDateFormat aSimpleDateFormat = new SimpleDateFormat("yyyy-MM");
        GregorianCalendar aGregorianCalendar = new GregorianCalendar();
        aGregorianCalendar.set(Calendar.MONTH, aGregorianCalendar
                .get(Calendar.MONTH) - 1);
        String currentYearAndMonth = aSimpleDateFormat
                .format(aGregorianCalendar.getTime());
        return currentYearAndMonth;
    }

    /**
     *功能:截取两个日期之间的天数 
     * @param String
     *            beginDate,String endDate
     * @return int
     * @throws ParseException
     * @author Cy
     * */
    public static int getDay(String beginDate, String endDate)
            throws ParseException {
        SimpleDateFormat sim = new SimpleDateFormat(DATE_FORMAT_PAR);
        Date d1 = null;
        Date d2 = null;
        try {
            d1 = sim.parse(beginDate);
            d2 = sim.parse(endDate);
        } catch (java.text.ParseException e) {
            e.printStackTrace();
        }
        return (int) ((d1.getTime() - d2.getTime()) / (3600L * 1000 * 24));
    }

    /**
     * 计算两个日期之间有多少润日
     * 
     * @param begin
     * @param end
     * @return 天数
     * @author yehui
     */
    public static int nbLeapDay(Date begin, Date end) {
        Date beginDate = null;
        Date endDate = null;
        if (begin.compareTo(end) > 0) {
            beginDate = end;
            endDate = begin;
        } else {
            beginDate = begin;
            endDate = end;
        }

        if (getYear(beginDate) == getYear(endDate)) {
            if (getMonth(beginDate) > 2 || getMonth(endDate) < 3) {
                return 0;
            } else if (isLeapYear(getYear(beginDate))) {
                return 1;
            }
        } else {
            int days = 0;
            for (int i = getYear(beginDate); i <= getYear(endDate); i++) {
                if (isLeapYear(i)
                        && beginDate.compareTo(getDateFromString(i + "-2-28")) < 0
                        && endDate.compareTo(getDateFromString(i + "-2-28")) > 0) {
                    days++;
                }
            }
            return days;
        }
        return 0;
    }
    
    /**
     * n为正数:获取n个月后日期,n为负数:获取n个月前日期
     * 
     * @author gongping
     * @since 2012-07-19
     * @return
     */
    public static Date getPrimaMonth(int n) {
        return getPrimaMonth(null,n);
    }
    
    public static Date getPrimaMonth(Date curDate,int n) {
        GregorianCalendar aGregorianCalendar = new GregorianCalendar();
        if (curDate != null)
            aGregorianCalendar.setTime(curDate);
        aGregorianCalendar.add(GregorianCalendar.MONTH, n);
        return aGregorianCalendar.getTime();
    }
    
}

总结:

以上这些就是这篇博客的主要内容,如果有不正确的地方希望读者可以留言给我,如果喜欢,麻烦大家关注一下,后续会推出更多常见的有关Java开发的博客,谢谢大家!

上一篇下一篇

猜你喜欢

热点阅读