java如何获取两个日期之间的所有月份(年月)及月数、年数呢?
下文笔者讲述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(); }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。