• Java日期工具类


    public class DateUtil
    {
        //默认显示日期的格式
        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 DateUtil.getDate(str, DateUtil.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());
        }
         
        /**
         * @param args
         */
        public static void main(String[] args)
        {
            //      //System.out.print(DateUtil.getDate("04:04:04","HH:mm:ss"));
            //      System.out.print("
    "+DateUtil.getCurZhCNDateTime());
            //      System.out.print("
    "+getFormateStr(DateUtil.getCurDate()));
            //      System.out.print("
    "+compareDateStr("1900-1-1 1:1:2","1900-1-1 1:1:3"));
            //      System.out.print("
    "+getDay(new Date()));
            //      System.out.print("
    "+getMonth(new Date()));
            //      System.out.print("
    "+getYear(new Date()));
            //      System.out.print("
    "+getMin(new Date()));
            ////        System.out.print("
    "+new Date().getSeconds());
            /*Date d1 = new Date(2007,11,30);
            Date d2 = new Date(2007,12,1);
            if(d2.compareTo(d1)>0){
                System.out.println("d2大于d1");
            }else{
                System.out.println("d2小于d1");
            }*/
     
            System.out.println(addDate(1, 1));
            System.out.println(addDate(2, 1));
            System.out.println(addDate(3, 1));
             
            System.out.println(getYYYYMMDDHHMMSSDate(new Date()));
             
            System.out.println(getCurentMonthDay());
             
        }
         
    }
    

      

  • 相关阅读:
    WebSocket
    CORS跨域请求
    Flask基础应用
    Python之人工智能(一)
    Linux(CentOS7)安装Nginx(附简单配置)
    SpringBoot异步调用--@Async详解
    Java8遍历Map、Map转List、List转Map
    Linux修改系统时间为东八区北京时间(上海时间)
    Docker 安装并部署Tomcat、Mysql8、Redis
    Mysql8.0新特性【详细版本】
  • 原文地址:https://www.cnblogs.com/mybloging/p/6917416.html
Copyright © 2020-2023  润新知