美文网首页功能专区android 技术知识Android开发经验谈
如何快速实现日期是当前日期时间的后一个月

如何快速实现日期是当前日期时间的后一个月

作者: 追梦小乐 | 来源:发表于2017-09-23 12:18 被阅读165次

项目遇到一个需求:选择开始时间,然后结束时间默认是开始时间的后一个月,效果如下

GIF.gif
思路分析:

假如开始时间选择了2017年12月22日,那么结束时间就变成了2018年1月22日,要实现这种效果,我之前还纠结了一下,最后想到用android中的Calendar来实现比较快一点

实现过程的核心方法

/**
     * 包含当前日期12个月之后
     * @return
     */
    public static String getCurrent12MonthAfter(String dateType,String dataTime) {
//        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(dateType, Locale.getDefault( ));
//        String currentTime = sdf.format(date);
        try {
            Date data = sdf.parse(dataTime);
            Calendar rightNow = Calendar.getInstance();
            rightNow.setTime(data);
            if (Calendar.MONTH - 12 != 0) {
                rightNow.add(Calendar.YEAR, 0);// 年份不变
                rightNow.add(Calendar.MONTH, +1);
                Date dataNow = rightNow.getTime();
                String nowCurrentTime = sdf.format(dataNow);
                return nowCurrentTime;
            } else {
                rightNow.add(Calendar.YEAR, +1);//  年份加1
                rightNow.add(Calendar.MONTH, 1);
                Date dataNow = rightNow.getTime();
                String nowCurrentTime = sdf.format(dataNow);
                return nowCurrentTime;
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return "";
    }

最后附上项目中用的完整的日期工具类

public class TimeUtils {
    
    public static String getCurrentTime() {
        return getCurrentTime("yyyy-MM-dd  HH:mm:ss");
    }
    
    public static String getCurrentTime2() {
        return getCurrentTime("yyyyMMddHHmmss");
    }

    public static String getCurrentTime3() {
        return getCurrentTime("yyyyMMdd");
    }

    
    public static String getCurrentTime(String format) {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.getDefault());
        String currentTime = sdf.format(date);
        return currentTime;
    }
    
    public static String getDate(){
        SimpleDateFormat    sDateFormat    =   new    SimpleDateFormat("yyyy-MM-dd");
        return sDateFormat.format(new    java.util.Date()); 
    }

    /**
     * 包含当前日期12个月之后
     * @return
     */
    public static String getCurrent12MonthAfter(String dateType,String dataTime) {
//        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat(dateType, Locale.getDefault( ));
//        String currentTime = sdf.format(date);
        try {
            Date data = sdf.parse(dataTime);
            Calendar rightNow = Calendar.getInstance();
            rightNow.setTime(data);
            if (Calendar.MONTH - 12 != 0) {
                rightNow.add(Calendar.YEAR, 0);// 年份不变
                rightNow.add(Calendar.MONTH, +1);
                Date dataNow = rightNow.getTime();
                String nowCurrentTime = sdf.format(dataNow);
                return nowCurrentTime;
            } else {
                rightNow.add(Calendar.YEAR, +1);//  年份加1
                rightNow.add(Calendar.MONTH, 1);
                Date dataNow = rightNow.getTime();
                String nowCurrentTime = sdf.format(dataNow);
                return nowCurrentTime;
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return "";
    }


    /**
     * 将string  19910924   --》  1991-09-24
     * @param date
     * @return
     */
    public static String getFormatDate(String date){
        StringBuilder sb = new StringBuilder();
        sb.append(date.substring(0,4));
        sb.append("-");
        sb.append(date.substring(4,6));
        sb.append("-");
        sb.append(date.substring(6,8));
        return sb.toString();
    }

    /**
     * startDate    格式 yyyy-MM-dd
     * currentDate   格式 yyyy-MM-dd
     * 比较日期的方法:开始时间与当前时间比较,小于当前时间的话,不能下一步
     * @return
     */
    public boolean compareDate(String startDate,String currentDate){
        ArrayList<String> mStartDateArr = getYearMonthDate(startDate);
        ArrayList<String> mCurrentDateArr = getYearMonthDate(currentDate);
        if (mStartDateArr == null ||  mStartDateArr.size() <= 0){
            return false;
        }
        if (mCurrentDateArr == null ||  mCurrentDateArr.size() <= 0){
            return false;
        }
        int mYearNum = Integer.valueOf(mStartDateArr.get(0));
        int mMonthNum = Integer.valueOf(mStartDateArr.get(1));
        int mDayNum = Integer.valueOf(mStartDateArr.get(2));
        int mCurrentYearNum = Integer.valueOf(mCurrentDateArr.get(0));
        int mCurrentMonthNum = Integer.valueOf(mCurrentDateArr.get(1));
        int mCurrentDayNum = Integer.valueOf(mCurrentDateArr.get(2));
        if (mYearNum < mCurrentYearNum){
            return false;
        }

        if (mYearNum == mCurrentYearNum && mMonthNum < mCurrentMonthNum){
            return false;
        }

        if (mYearNum == mCurrentYearNum && mMonthNum == mCurrentMonthNum && mDayNum < mCurrentDayNum){
            return false;
        }

        return true;
    }

    /**
     * 根据日期获取年月日的方法
     * @param date
     * @return
     */
    private ArrayList<String> getYearMonthDate(String date){
        ArrayList<String> mDateList = new ArrayList<String>();
        mDateList.clear();
        String  separators = "-";
        if (TextUtils.isEmpty(date)){
            return null;
        }
        String[] split = date.split(separators);
        mDateList.add(split[0]);
        mDateList.add(split[1]);
        mDateList.add(split[2]);
        return mDateList;
    }
}

相关文章

网友评论

    本文标题:如何快速实现日期是当前日期时间的后一个月

    本文链接:https://www.haomeiwen.com/subject/uekcextx.html