java 获取两个日期之间的所有月份 (年月)、以及月数、年数

    /**
     * 获取两个日期之间的所有月份 (年月)
     *
     * @param startTime
     * @param endTime
     * @return:YYYY-MM
     */
    public static List<String> getMonthBetweenDate(String startTime, String endTime){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        // 声明保存日期集合
        List<String> list = new ArrayList<String>();
        try {
            // 转化成日期类型
            Date startDate = sdf.parse(startTime);
            Date endDate = sdf.parse(endTime);
 
            //用Calendar 进行日期比较判断
            Calendar calendar = Calendar.getInstance();
            while (startDate.getTime()<=endDate.getTime()){
                // 把日期添加到集合
                list.add(sdf.format(startDate));
                // 设置日期
                calendar.setTime(startDate);
                //把日期增加一天
                calendar.add(Calendar.MONTH, 1);
                // 获取增加后的日期
                startDate=calendar.getTime();
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return list;
    }
 
    public static void main(String[] args) throws ParseException {
        String startStr = "2021-02-26";
        String endStr = "2022-03-09";
        List<String> list = getMonthBetweenDate(startStr, endStr);
        System.out.println(list);
    }

输出结果

 /**
     * 根据两个时间获取相差的月数
     * @param d1 日期起期
     * @param d2  日期止期
     * @return
     */
    public static int getMonth(Date d1, Date d2) {
        Calendar c1 = Calendar.getInstance();
        Calendar c2 = Calendar.getInstance();
        c1.setTime(d1);
        c2.setTime(d2);
        int year1 = c1.get(Calendar.YEAR);
        int year2 = c2.get(Calendar.YEAR);
        int month1 = c1.get(Calendar.MONTH);
        int month2 = c2.get(Calendar.MONTH);
        int day1 = c1.get(Calendar.DAY_OF_MONTH);
        int day2 = c2.get(Calendar.DAY_OF_MONTH);
        // 获取年的差值
        int yearInterval = year1 - year2;
        // 如果 d1的 月-日 小于 d2的 月-日 那么 yearInterval-- 这样就得到了相差的年数
        if (month1 < month2 || month1 == month2 && day1 < day2) {
            yearInterval--;
        }
        // 获取月数差值
        int monthInterval = (month1 + 12) - month2;
        if (day1 < day2) {
            monthInterval--;
        }
        monthInterval %= 12;
        int monthsDiff = Math.abs(yearInterval * 12 + monthInterval);
        return monthsDiff;
    }
    /**
     *   根据两个日期获取相差年数
     * @param startDate  日期起期
     * @param endDate    日期止期
     * @return
     */
    public static int getYear(Date startDate, Date endDate) {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
        String startDateStr = simpleDateFormat.format(startDate);
        String endDateStr = simpleDateFormat.format(endDate);
        return (Integer.parseInt(endDateStr) - Integer.parseInt(startDateStr)) / 10000;
    }

根据出生日期算年龄

 /**
     * 根据出生日期获取当前时间的年龄
     * @param birthdate
     * @return
     */
    public static int getYear(Date birthdate) {
        Date now = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
        String format1 = simpleDateFormat.format(birthdate);
        String format = simpleDateFormat.format(now);
        return (Integer.parseInt(format) - Integer.parseInt(format1)) / 10000;
    }
package com.xxx;

import org.junit.Test;

import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @author Chang
 * @program: bmps-cloud-core-prd07
 * @description: 测试类
 * @date 2022-07-17 15:21:01
 */
public class Test02 {
    /**
     * 截取字符串
     */
    @Test
    public void test1(){
        String polApplyDateStr = "20220102";
        String insuredBirthdayStr = "20210909";
        String substring1 = polApplyDateStr.substring(4, 8);
        String substring2 = insuredBirthdayStr.substring(4, 8);
        String substring = polApplyDateStr.substring(0, 4);
        System.out.println(substring);
        System.out.println(substring1);
        System.out.println(substring2);
    }

    /**
     * 冒号分割字符串
     */
    @Test
    public void test2(){
        String riskAmntHashKey="1:2:3";
        String[] split = riskAmntHashKey.split(":");
        String s = split[1];
        System.out.println(s);
    }

    /**
     *保留两位小数
     */
    @Test
    public void test3(){
        double f = 111231.5545;
        DecimalFormat df = new DecimalFormat("#.00");
        System.out.println(df.format(f));
    }

    @Test
    public void test4() throws ParseException {

        /**
         * 获取两个日期之间的所有月份 (年月)
         *
         * @param startTime
         * @param endTime
         * @return:YYYY-MM
         */
        String startStr = "2021-07-10";
        String endStr = "2022-08-10";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
        // 声明保存日期集合
        List<String> list = new ArrayList<String>();

        // 转化成日期类型
        Date startDate = sdf.parse(startStr);
        Date endDate = sdf.parse(endStr);

        //用Calendar 进行日期比较判断
        Calendar calendar = Calendar.getInstance();
        while (startDate.getTime() <= endDate.getTime()) {
            // 把日期添加到集合
            list.add(sdf.format(startDate));
            // 设置日期
            calendar.setTime(startDate);
            //把日期增加一天
            calendar.add(Calendar.MONTH, 1);
            // 获取增加后的日期
            startDate = calendar.getTime();
        }
        System.out.println(list);

    }


}
 /**
     * list集合转字符串,用分隔符分隔
     *
     * @param list
     * @param separator
     * @return
     */
    public String listToString(List list, char separator) {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < list.size(); i++) {
            sb.append(list.get(i));
            if (i < list.size() - 1) {
                sb.append(separator);
            }
        }
        return sb.toString();
    }

 

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值