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

欣喜 Java经验 发布时间:2024-11-21 15:03:28 阅读数:18832 1
下文笔者讲述java中获取日期之间的月份,年数的方法简介说明,如下所示
使用Calendar实例对象
    即可对日期进行相减,即可得到日期之间的月份
/**
 * 获取两个日期之间的所有月份 (年月)
 *
 * @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 = "2024-12-26";
	String endStr   = "2024-12-28";
	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;

 
public class Test02 {
/**
 * 截取字符串
 */
@Test
public void test1(){
	String polApplyDateStr    = "20240111";
	String insuredBirthdayStr = "20240912";
	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 = "2024-07-10";
	String endStr   = "2024-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();
}

 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202411/17321726388186.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者