DateUtil日期处理工具类

public class DateUtil
{
    // 按照给定的格式化字符串格式化日期
    public static String formatDate( Date date, String formatStr )
    {
        SimpleDateFormat sdf = new SimpleDateFormat( formatStr );
        return sdf.format( date );
    }

    // 按照给定的格式化字符串解析日期
    public static Date parseDate( String dateStr, String formatStr )
            throws ParseException
    {
        Date date = null;
        SimpleDateFormat sdf = new SimpleDateFormat( formatStr );
        date = sdf.parse( dateStr );
        return date;
    }

    // 从字符串中分析日期
    public static Date parseDate( String dateStr ) throws ParseException
    {
        Date date = null;
        String[] dateArray = dateStr.split( "\\D+" ); // +防止多个非数字字符在一起时导致解析错误
        int dateLen = dateArray.length;
        int dateStrLen = dateStr.length();
        if ( dateLen > 0 )
        {
            if ( dateLen == 1 && dateStrLen > 4 )
            {
                if ( dateStrLen == "yyyyMMddHHmmss".length() )
                {
                    // 如果字符串长度为14位并且不包含其他非数字字符,则按照(yyyyMMddHHmmss)格式解析
                    date = parseDate( dateStr, "yyyyMMddHHmmss" );
                } else if ( dateStrLen == "yyyyMMddHHmm".length() )
                {
                    date = parseDate( dateStr, "yyyyMMddHHmm" );
                } else if ( dateStrLen == "yyyyMMddHH".length() )
                {
                    date = parseDate( dateStr, "yyyyMMddHH" );
                } else if ( dateStrLen == "yyyyMMdd".length() )
                {
                    date = parseDate( dateStr, "yyyyMMdd" );
                } else if ( dateStrLen == "yyyyMM".length() )
                {
                    date = parseDate( dateStr, "yyyyMM" );
                }
            } else
            {
                String fDateStr = dateArray[0];
                for ( int i = 1; i < dateLen; i++ )
                {
                    // 左补齐是防止十位数省略的情况
                    fDateStr += leftPad( dateArray[i], "0", 2 );
                }

                if ( dateStr.trim()
                        .matches( "^\\d{1,2}:\\d{1,2}(:\\d{1,2})?$" ) )
                {
                    // 补充年月日3个字段
                    dateLen += 3;
                    fDateStr = formatDate( new Date(), "yyyyMMdd" ) + fDateStr;
                }

                date = parseDate( fDateStr, "yyyyMMddHHmmss".substring( 0,
                        (dateLen - 1) * 2 + 4 ) );
            }
        }

        return date;
    }

    // 左补齐
    public static String leftPad( String str, String pad, int len )
    {
        String newStr = (str == null ? "" : str);
        while ( newStr.length() < len )
        {
            newStr = pad + newStr;
        }
        if ( newStr.length() > len )
        {
            newStr = newStr.substring( newStr.length() - len );
        }
        return newStr;
    }

    // 获取给定日期中的年月
    public static String getYearMonth( java.sql.Date date )
    {
        Calendar mCalendar = GregorianCalendar.getInstance();
        mCalendar.setTime( date );
        int year = mCalendar.get( Calendar.YEAR );
        int month = mCalendar.get( Calendar.MONTH ) + 1;
        if ( month < 10 )
        {
            return String.valueOf( year ) + "0" + String.valueOf( month );
        } else
        {
            return String.valueOf( year ) + String.valueOf( month );
        }
    }

    // 获取当前年月字符串
    public static String findYearMonth()
    {
        /**
         * 声明一个int变量year
         */
        int year;
        /**
         * 声明一个int变量month
         */
        int month;
        /**
         * 声明一个字符串变量date
         */
        String date;
        /**
         * 实例化一个对象calendar
         */
        Calendar calendar = Calendar.getInstance();
        /**
         * 获取年份
         */
        year = calendar.get( Calendar.YEAR );
        /**
         * 获取月份
         */
        month = calendar.get( Calendar.MONTH ) + 1;
        /**
         * 拼接年份和月份
         */
        if ( month < 10 )
        {
            return String.valueOf( year ) + "0" + String.valueOf( month );
        } else
        {
            return String.valueOf( year ) + String.valueOf( month );
        }
    }

    // 获取当前年月字符串
    public static String findYearMonthWithSlash()
    {
        /**
         * 声明一个int变量year
         */
        int year;
        /**
         * 声明一个int变量month
         */
        int month;
        /**
         * 声明一个字符串变量date
         */
        String date;
        /**
         * 实例化一个对象calendar
         */
        Calendar calendar = Calendar.getInstance();
        /**
         * 获取年份
         */
        year = calendar.get( Calendar.YEAR );
        /**
         * 获取月份
         */
        month = calendar.get( Calendar.MONTH ) + 1;
        /**
         * 拼接年份和月份
         */
        if ( month < 10 )
        {
            return String.valueOf( year ) + "-0" + String.valueOf( month );
        } else
        {
            return String.valueOf( year ) + "-" + String.valueOf( month );
        }
    }

    public static int getDay( String strDate )
    {
        try
        {
            SimpleDateFormat format = new SimpleDateFormat( "yyyy-MM-dd" );
            Date date = format.parse( strDate );
            Calendar mCalendar = GregorianCalendar.getInstance();
            mCalendar.setTime( date );
            return mCalendar.get( Calendar.DAY_OF_MONTH );
        } catch ( ParseException e )
        {
            e.printStackTrace();
            return -1;
        }

    }

    public static int getDateDay( Date date )
    {
        Calendar mCalendar = GregorianCalendar.getInstance();
        mCalendar.setTime( date );
        return mCalendar.get( Calendar.DAY_OF_MONTH );

    }

    /**
     * @Title: days @Description: 获取某年某月的天数 @param @param year 年份 @param @param
     *         month 月份 @param @return 设定文件 @return int 返回类型 @throws
     */
    public static int days( int year, int month )
    {
        int days = 0;
        if ( month != 2 )
        {
            switch ( month )
            {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    days = 31;
                    break;
                case 4:
                case 6:
                case 9:
                case 11:
                    days = 30;

            }
        } else
        {
            // 闰年
            if ( year % 4 == 0 && year % 100 != 0 || year % 400 == 0 )
                days = 29;
            else
                days = 28;

        }
        return days;

    }

    /**
     * @Title: getLastDate @Description: 获取前一天的日期 @param @param
     *         date @param @return 设定文件 @return Date 返回类型 @throws
     */
    public static Date getLastDate( Date date )
    {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime( date );
        calendar.add( Calendar.DAY_OF_MONTH, -1 );// -1今天的时间减一天
        date = calendar.getTime();
        return date;
    }

    /** 
     * 获取指定月的前一月(年)或后一月(年) 
     * @param dateStr 指定日期
     * @param addYear 增加的年数
     * @param addMonth 增加的月数
     * @param addDate 增加的天数
     * @return 输入的时期格式为yyyyMM,输出的日期格式为yyyyMM 
     * @throws Exception 
     */
    public static String getLastMonth( String dateStr, int addYear,
            int addMonth, int addDate ) throws Exception
    {
        try
        {
            SimpleDateFormat sdf = new SimpleDateFormat(
                    "yyyyMM" );
            Date sourceDate = sdf.parse( dateStr );
            Calendar cal = Calendar.getInstance();
            cal.setTime( sourceDate );
            cal.add( Calendar.YEAR, addYear );
            cal.add( Calendar.MONTH, addMonth );
            cal.add( Calendar.DATE, addDate );

            SimpleDateFormat returnSdf = new SimpleDateFormat(
                    "yyyyMM" );
            String dateTmp = returnSdf.format( cal.getTime() );
            Date returnDate = returnSdf.parse( dateTmp );
            return dateTmp;
        } catch ( Exception e )
        {
            e.printStackTrace();
            throw new Exception( e.getMessage() );
        }
    }

    /**
     * @Title: getNextDate @Description: 获取后一天的日期 @param @param
     *         date @param @return 设定文件 @return Date 返回类型 @throws
     */
    public static Date getNextDate( Date date )
    {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime( date );
        calendar.add( Calendar.DAY_OF_MONTH, +1 );// +1今天的时间加一天
        date = calendar.getTime();
        return date;
    }

    public static int getAge( Date birthDate )
    {

        if ( birthDate == null )
            throw new RuntimeException( "出生日期不能为null" );

        int age = 0;

        Date now = new Date();

        SimpleDateFormat format_y = new SimpleDateFormat( "yyyy" );
        SimpleDateFormat format_M = new SimpleDateFormat( "MM" );

        String birth_year = format_y.format( birthDate );
        String this_year = format_y.format( now );

        String birth_month = format_M.format( birthDate );
        String this_month = format_M.format( now );

        // 初步,估算
        age = Integer.parseInt( this_year ) - Integer.parseInt( birth_year );

        // 如果未到出生月份,则age - 1
        if ( this_month.compareTo( birth_month ) < 0 )
            age -= 1;
        if ( age < 0 )
            age = 0;
        return age;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值