[转]JAVA日期经典工具类


    //默认显示日期的格式
            public static final String DATAFORMAT_STR = "yyyy-MM-dd";
             
            //默认显示日期的格式
            public static final String YYYY_MM_DATAFORMAT_STR = "yyyy-MM";
             
            //默认显示日期时间的格式
            public static final String DATATIMEF_STR = "yyyy-MM-dd HH:mm:ss";
             
            //默认显示简体中文日期的格式
            public static final String ZHCN_DATAFORMAT_STR = "yyyy年MM月dd日";
             
            //默认显示简体中文日期时间的格式
            public static final String ZHCN_DATATIMEF_STR = "yyyy年MM月dd日HH时mm分ss秒";
             
            //默认显示简体中文日期时间的格式
            public static final String ZHCN_DATATIMEF_STR_4yMMddHHmm = "yyyy年MM月dd日HH时mm分";
             
            private static DateFormat dateFormat = null;
             
            private static DateFormat dateTimeFormat = null;
             
            private static DateFormat zhcnDateFormat = null;
             
            private static DateFormat zhcnDateTimeFormat = null;
            static
            {
                dateFormat = new SimpleDateFormat(DATAFORMAT_STR);
                dateTimeFormat = new SimpleDateFormat(DATATIMEF_STR);
                zhcnDateFormat = new SimpleDateFormat(ZHCN_DATAFORMAT_STR);
                zhcnDateTimeFormat = new SimpleDateFormat(ZHCN_DATATIMEF_STR);
            }
             
            private static DateFormat getDateFormat(String formatStr)
            {
                if (formatStr.equalsIgnoreCase(DATAFORMAT_STR))
                {
                    return dateFormat;
                }
                else
                    if (formatStr.equalsIgnoreCase(DATATIMEF_STR))
                    {
                        return dateTimeFormat;
                    }
                    else
                        if (formatStr.equalsIgnoreCase(ZHCN_DATAFORMAT_STR))
                        {
                            return zhcnDateFormat;
                        }
                        else
                            if (formatStr.equalsIgnoreCase(ZHCN_DATATIMEF_STR))
                            {
                                return zhcnDateTimeFormat;
                            }
                            else
                            {
                                return new SimpleDateFormat(formatStr);
                            }
            }
             
            /**
             * 按照默认显示日期时间的格式"yyyy-MM-dd HH:mm:ss",转化dateTimeStr为Date类型
             * dateTimeStr必须是"yyyy-MM-dd HH:mm:ss"的形式
             * @param dateTimeStr
             * @return
             */
            public static Date getDate(String dateTimeStr)
            {
                return getDate(dateTimeStr, DATATIMEF_STR);
            }
             
            /**
             * 按照默认formatStr的格式,转化dateTimeStr为Date类型
             * dateTimeStr必须是formatStr的形式
             * @param dateTimeStr
             * @param formatStr
             * @return
             */
            public static Date getDate(String dateTimeStr, String formatStr)
            {
                try
                {
                    if (dateTimeStr == null || dateTimeStr.equals(""))
                    {
                        return null;
                    }
                    DateFormat sdf = getDateFormat(formatStr);
                    java.util.Date d = sdf.parse(dateTimeStr);
                    return d;
                }
                catch (ParseException e)
                {
                    throw new RuntimeException(e);
                }
            }
             
            /**
             * 将YYYYMMDD转换成Date日期
             * @param date
             * @return
             * @throws BusinessException
             */
            public static Date transferDate(String date) throws Exception
            {
                if (date == null || date.length() < 1)
                    return null;
                 
                if (date.length() != 8)
                    throw new Exception("日期格式错误");
                String con = "-";
                 
                String yyyy = date.substring(0, 4);
                String mm = date.substring(4, 6);
                String dd = date.substring(6, 8);
                 
                int month = Integer.parseInt(mm);
                int day = Integer.parseInt(dd);
                if (month < 1 || month > 12 || day < 1 || day > 31)
                    throw new Exception("日期格式错误");
                 
                String str = yyyy + con + mm + con + dd;
                return CalendarUtil.getDate(str, CalendarUtil.DATAFORMAT_STR);
            }
             
            /**
             * 将YYYY-MM-DD日期转换成yyyymmdd格式字符串
             * @param date
             * @return
             */
            public static String getYYYYMMDDDate(Date date)
            {
                if (date == null)
                    return null;
                String yyyy = getYear(date) + "";
                String mm = getMonth(date) + "";
                String dd = getDay(date) + "";
                 
                mm = StringUtil.rightAlign(mm, 2, "0");
                dd = StringUtil.rightAlign(dd, 2, "0");
                return yyyy + mm + dd;
            }
             
            /**
             * 将YYYY-MM-DD日期转换成YYYYMMDDHHMMSS格式字符串
             * @param date
             * @return
             */
            public static String getYYYYMMDDHHMMSSDate(Date date)
            {
                if (date == null)
                    return null;
                String yyyy = getYear(date) + "";
                String mm = getMonth(date) + "";
                String dd = getDay(date) + "";
                String hh = getHour(date) + "";
                String min = getMin(date) + "";
                String ss = getSecond(date) + "";
                 
                mm = StringUtil.rightAlign(mm, 2, "0");
                dd = StringUtil.rightAlign(dd, 2, "0");
                hh = StringUtil.rightAlign(hh, 2, "0");
                min = StringUtil.rightAlign(min, 2, "0");
                ss = StringUtil.rightAlign(ss, 2, "0");
                 
                return yyyy + mm + dd + hh + min + ss;
            }
             
            /**
             * 将YYYY-MM-DD日期转换成yyyymmdd格式字符串
             * @param date
             * @return
             */
            public static String getYYYYMMDDDate(String date)
            {
                return getYYYYMMDDDate(getDate(date, DATAFORMAT_STR));
            }
             
            /**
             * 将Date转换成字符串“yyyy-mm-dd hh:mm:ss”的字符串
             * @param date
             * @return
             */
            public static String dateToDateString(Date date)
            {
                return dateToDateString(date, DATATIMEF_STR);
            }
             
            /**
             * 将Date转换成formatStr格式的字符串
             * @param date
             * @param formatStr
             * @return
             */
            public static String dateToDateString(Date date, String formatStr)
            {
                DateFormat df = getDateFormat(formatStr);
                return df.format(date);
            }
             
           /**
             * 返回一个yyyy-MM-dd HH:mm:ss 形式的日期时间字符串中的HH:mm:ss
             * @param dateTime
             * @return
             */
            public static String getTimeString(String dateTime)
            {
                return getTimeString(dateTime, DATATIMEF_STR);
            }
             
            /**
             * 返回一个formatStr格式的日期时间字符串中的HH:mm:ss
             * @param dateTime
             * @param formatStr
             * @return
             */
            public static String getTimeString(String dateTime, String formatStr)
            {
                Date d = getDate(dateTime, formatStr);
                String s = dateToDateString(d);
                return s.substring(DATATIMEF_STR.indexOf('H'));
            }
             
            /**
             * 获取当前日期yyyy-MM-dd的形式
             * @return
             */
            public static String getCurDate()
            {
                //return dateToDateString(new Date(),DATAFORMAT_STR);
                return dateToDateString(Calendar.getInstance().getTime(), DATAFORMAT_STR);
            }
             
            /**
             * 获取当前日期yyyy年MM月dd日的形式
             * @return
             */
            public static String getCurZhCNDate()
            {
                return dateToDateString(new Date(), ZHCN_DATAFORMAT_STR);
            }
             
            /**
             * 获取当前日期时间yyyy-MM-dd HH:mm:ss的形式
             * @return
             */
            public static String getCurDateTime()
            {
                return dateToDateString(new Date(), DATATIMEF_STR);
            }
             
            /**
             * 获取当前日期时间yyyy年MM月dd日HH时mm分ss秒的形式
             * @return
             */
            public static String getCurZhCNDateTime()
            {
                return dateToDateString(new Date(), ZHCN_DATATIMEF_STR);
            }
             
            /**
             * 获取日期d的days天后的一个Date
             * @param d
             * @param days
             * @return
             */
            public static Date getInternalDateByDay(Date d, int days)
            {
                Calendar now = Calendar.getInstance(TimeZone.getDefault());
                now.setTime(d);
                now.add(Calendar.DATE, days);
                return now.getTime();
            }
             
            public static Date getInternalDateByMon(Date d, int months)
            {
                Calendar now = Calendar.getInstance(TimeZone.getDefault());
                now.setTime(d);
                now.add(Calendar.MONTH, months);
                return now.getTime();
            }
             
            public static Date getInternalDateByYear(Date d, int years)
            {
                Calendar now = Calendar.getInstance(TimeZone.getDefault());
                now.setTime(d);
                now.add(Calendar.YEAR, years);
                return now.getTime();
            }
             
            public static Date getInternalDateBySec(Date d, int sec)
            {
                Calendar now = Calendar.getInstance(TimeZone.getDefault());
                now.setTime(d);
                now.add(Calendar.SECOND, sec);
                return now.getTime();
            }
             
            public static Date getInternalDateByMin(Date d, int min)
            {
                Calendar now = Calendar.getInstance(TimeZone.getDefault());
                now.setTime(d);
                now.add(Calendar.MINUTE, min);
                return now.getTime();
            }
             
            public static Date getInternalDateByHour(Date d, int hours)
            {
                Calendar now = Calendar.getInstance(TimeZone.getDefault());
                now.setTime(d);
                now.add(Calendar.HOUR_OF_DAY, hours);
                return now.getTime();
            }
             
            /**
             * 根据一个日期字符串,返回日期格式,目前支持4种
             * 如果都不是,则返回null
             * @param DateString
             * @return
             */
            public static String getFormateStr(String DateString)
            {
                String patternStr1 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}"; //"yyyy-MM-dd"
                String patternStr2 = "[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\\s[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}"; //"yyyy-MM-dd HH:mm:ss";
                String patternStr3 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日";//"yyyy年MM月dd日"
                String patternStr4 = "[0-9]{4}年[0-9]{1,2}月[0-9]{1,2}日[0-9]{1,2}时[0-9]{1,2}分[0-9]{1,2}秒";//"yyyy年MM月dd日HH时mm分ss秒"
                 
                Pattern p = Pattern.compile(patternStr1);
                Matcher m = p.matcher(DateString);
                boolean b = m.matches();
                if (b)
                    return DATAFORMAT_STR;
                p = Pattern.compile(patternStr2);
                m = p.matcher(DateString);
                b = m.matches();
                if (b)
                    return DATATIMEF_STR;
                 
                p = Pattern.compile(patternStr3);
                m = p.matcher(DateString);
                b = m.matches();
                if (b)
                    return ZHCN_DATAFORMAT_STR;
                 
                p = Pattern.compile(patternStr4);
                m = p.matcher(DateString);
                b = m.matches();
                if (b)
                    return ZHCN_DATATIMEF_STR;
                return null;
            }
             
            /**
             * 将一个"yyyy-MM-dd HH:mm:ss"字符串,转换成"yyyy年MM月dd日HH时mm分ss秒"的字符串
             * @param dateStr
             * @return
             */
            public static String getZhCNDateTime(String dateStr)
            {
                Date d = getDate(dateStr);
                return dateToDateString(d, ZHCN_DATATIMEF_STR);
            }
             
            /**
             * 将一个"yyyy-MM-dd"字符串,转换成"yyyy年MM月dd日"的字符串
             * @param dateStr
             * @return
             */
            public static String getZhCNDate(String dateStr)
            {
                Date d = getDate(dateStr, DATAFORMAT_STR);
                return dateToDateString(d, ZHCN_DATAFORMAT_STR);
            }
             
            /**
             * 将dateStr从fmtFrom转换到fmtTo的格式
             * @param dateStr
             * @param fmtFrom
             * @param fmtTo
             * @return
             */
            public static String getDateStr(String dateStr, String fmtFrom, String fmtTo)
            {
                Date d = getDate(dateStr, fmtFrom);
                return dateToDateString(d, fmtTo);
            }
             
            /**
             * 比较两个"yyyy-MM-dd HH:mm:ss"格式的日期,之间相差多少毫秒,time2-time1
             * @param time1
             * @param time2
             * @return
             */
            public static long compareDateStr(String time1, String time2)
            {
                Date d1 = getDate(time1);
                Date d2 = getDate(time2);
                return d2.getTime() - d1.getTime();
            }
             
            /**
             * 将小时数换算成返回以毫秒为单位的时间
             * @param hours
             * @return
             */
            public static long getMicroSec(BigDecimal hours)
            {
                BigDecimal bd;
                bd = hours.multiply(new BigDecimal(3600 * 1000));
                return bd.longValue();
            }
             
            /**
             * 获取Date中的分钟
             * @param d
             * @return
             */
            public static int getMin(Date d)
            {
                Calendar now = Calendar.getInstance(TimeZone.getDefault());
                now.setTime(d);
                return now.get(Calendar.MINUTE);
            }
             
            /**
             * 获取Date中的小时(24小时)
             * @param d
             * @return
             */
            public static int getHour(Date d)
            {
                Calendar now = Calendar.getInstance(TimeZone.getDefault());
                now.setTime(d);
                return now.get(Calendar.HOUR_OF_DAY);
            }
             
            /**
             * 获取Date中的秒
             * @param d
             * @return
             */
            public static int getSecond(Date d)
            {
                Calendar now = Calendar.getInstance(TimeZone.getDefault());
                now.setTime(d);
                return now.get(Calendar.SECOND);
            }
             
            /**
             * 获取xxxx-xx-xx的日
             * @param d
             * @return
             */
            public static int getDay(Date d)
            {
                Calendar now = Calendar.getInstance(TimeZone.getDefault());
                now.setTime(d);
                return now.get(Calendar.DAY_OF_MONTH);
            }
             
            /**
             * 获取月份,1-12月
             * @param d
             * @return
             */
            public static int getMonth(Date d)
            {
                Calendar now = Calendar.getInstance(TimeZone.getDefault());
                now.setTime(d);
                return now.get(Calendar.MONTH) + 1;
            }
             
            /**
             * 获取19xx,20xx形式的年
             * @param d
             * @return
             */
            public static int getYear(Date d)
            {
                Calendar now = Calendar.getInstance(TimeZone.getDefault());
                now.setTime(d);
                return now.get(Calendar.YEAR);
            }
             
            /**
             * 得到d的上个月的年份+月份,如200505
             * @return
             */
            public static String getYearMonthOfLastMon(Date d)
            {
                Date newdate = getInternalDateByMon(d, -1);
                String year = String.valueOf(getYear(newdate));
                String month = String.valueOf(getMonth(newdate));
                return year + month;
            }
             
            /**
             * 得到当前日期的年和月如200509
             * @return String
             */
            public static String getCurYearMonth()
            {
                Calendar now = Calendar.getInstance(TimeZone.getDefault());
                String DATE_FORMAT = "yyyyMM";
                java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(DATE_FORMAT);
                sdf.setTimeZone(TimeZone.getDefault());
                return (sdf.format(now.getTime()));
            }
             
            public static Date getNextMonth(String year, String month)
            {
                String datestr = year + "-" + month + "-01";
                Date date = getDate(datestr, DATAFORMAT_STR);
                return getInternalDateByMon(date, 1);
            }
             
            public static Date getLastMonth(String year, String month)
            {
                String datestr = year + "-" + month + "-01";
                Date date = getDate(datestr, DATAFORMAT_STR);
                return getInternalDateByMon(date, -1);
            }
             
            /**
             * 得到日期d,按照页面日期控件格式,如"2001-3-16"
             * @param d
             * @return
             */
            public static String getSingleNumDate(Date d)
            {
                return dateToDateString(d, DATAFORMAT_STR);
            }
             
            /**
             * 得到d半年前的日期,"yyyy-MM-dd"
             * @param d
             * @return
             */
            public static String getHalfYearBeforeStr(Date d)
            {
                return dateToDateString(getInternalDateByMon(d, -6), DATAFORMAT_STR);
            }
             
            /**
             * 得到当前日期D的月底的前/后若干天的时间,<0表示之前,>0表示之后
             * @param d
             * @param days
             * @return
             */
            public static String getInternalDateByLastDay(Date d, int days)
            {
                 
                return dateToDateString(getInternalDateByDay(d, days), DATAFORMAT_STR);
            }
             
            /**
             * 日期中的年月日相加
             *  @param field int  需要加的字段  年 月 日
             * @param amount int 加多少
             * @return String
             */
            public static String addDate(int field, int amount)
            {
                int temp = 0;
                if (field == 1)
                {
                    temp = Calendar.YEAR;
                }
                if (field == 2)
                {
                    temp = Calendar.MONTH;
                }
                if (field == 3)
                {
                    temp = Calendar.DATE;
                }
                 
                String Time = "";
                try
                {
                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                    Calendar cal = Calendar.getInstance(TimeZone.getDefault());
                    cal.add(temp, amount);
                    Time = sdf.format(cal.getTime());
                    return Time;
                }
                catch (Exception e)
                {
                    e.printStackTrace();
                    return null;
                }
                 
            }
             
            /**
             * 获得系统当前月份的天数
             * @return
             */
            public static int getCurentMonthDay()
            {
                Date date = Calendar.getInstance().getTime();
                return getMonthDay(date);
            }
             
            /**
             * 获得指定日期月份的天数
             * @return
             */
            public static int getMonthDay(Date date)
            {
                Calendar c = Calendar.getInstance();
                c.setTime(date);
                return c.getActualMaximum(Calendar.DAY_OF_MONTH);
                 
            }
             
            /**
             * 获得指定日期月份的天数  yyyy-mm-dd
             * @return
             */
            public static int getMonthDay(String date)
            {
                Date strDate = getDate(date, DATAFORMAT_STR);
                return getMonthDay(strDate);
                 
            }
             
            public static String getStringDate(Calendar cal)
            {
                 
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
                return format.format(cal.getTime());
            }

原文地址:https://www.cnblogs.com/sunson/p/3105444.html