Java日期工具类

在软件开发过程中,常常会面临各种涉及时间的情境,例如需要获取给定月份的上一个月等情况。因此,我总结了在开发中经常遇到的关于日期的问题,并将它们整合成了一个方便调用的Java工具类。如下:

1、获取传入日期的前五天,不考虑跨越

public static List<String> getDatesList(String pdate) {
		List<String> datesList = new ArrayList<>();
		List<LocalDate> previousFiveDays = new ArrayList<>();
		LocalDate date2 = LocalDate.parse(pdate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

		// 逐一计算前五天的日期
		for (int i = 0; i < 5; i++) {
			//判断是不是在一个月份,如果不是,则不添加,反正则添加
//			if (date2.minusDays(i).getMonthValue() == date2.getMonthValue()) {
//				previousFiveDays.add(date2.minusDays(i));
//			}
			previousFiveDays.add(date2.minusDays(i));
		}
		// 格式化日期为字符串
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
		for (LocalDate date : previousFiveDays) {
			String day = date.format(formatter);
			datesList.add(day);
		}
		return datesList;
	}

2、根据传入的开始日期、结束日期查询该范围内的全部日期

public static List<String> getRangeDateList(String sdate,String edate){
		LocalDate startDate = LocalDate.parse(sdate);
		LocalDate endDate = LocalDate.parse(edate);

		List<LocalDate> dateList = new ArrayList<>();
		List<String> rangeList = new ArrayList<>();
		LocalDate currentDate = startDate;

		while (!currentDate.isAfter(endDate)) {
			dateList.add(currentDate);
			currentDate = currentDate.plus(Period.ofDays(1));
		}
		//格式转换
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
		for (LocalDate date : dateList) {
			String day = date.format(formatter);
			rangeList.add(day);
		}

		return rangeList;
	}

3、根据月份获取该月的全部日期信息

public static List<String> getMonthDates(String pdate){
		List<String> dateList = new ArrayList<>();
		List<Date> dates = new ArrayList<>();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		try {
			date = sdf.parse(pdate);
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(date);
			calendar.set(Calendar.DAY_OF_MONTH, 1);
			int month = calendar.get(Calendar.MONTH);
			while (calendar.get(Calendar.MONTH) == month) {
				dates.add(calendar.getTime());
				calendar.add(Calendar.DAY_OF_MONTH, 1);
			}
		} catch (ParseException e) {
//			e.printStackTrace();
			log.info("Error", e);
		}
		for (Date date1 : dates) {
			dateList.add(sdf.format(date1));
		}
		return dateList;
	}

4、获取传入月份的开始日期和结束日期

public static List<String> getBEDateOfMonth(String month){
		List<String> dateList = new ArrayList<>();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		try {
			date = sdf.parse(month);
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(date);
			// 获取给定日期所在月份的开始时间
			calendar.set(Calendar.DAY_OF_MONTH, 1);
			Date monthStartDate = calendar.getTime();
			// 获取给定日期所在月份的结束时间
			calendar.add(Calendar.MONTH, 1);
			calendar.set(Calendar.DAY_OF_MONTH, 1);
			calendar.add(Calendar.DAY_OF_MONTH, -1);
			Date monthEndDate = calendar.getTime();
			String startDate = sdf.format(monthStartDate);
			String endDate = sdf.format(monthEndDate);
			dateList.add(startDate);
			dateList.add(endDate);
		} catch (ParseException e) {
//			e.printStackTrace();
			log.info("Error", e);
		}
		return dateList;
	}

5、获取传入月份的上一个月

public static  String getLastMonth(String month) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		try {
			date = format.parse(month);
			Calendar calendar = Calendar.getInstance();
			// 设置为当前时间
			calendar.setTime(date);
			calendar.add(Calendar.MONTH,-1);
			// 设置为上一个月
			//calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);
			date = calendar.getTime();
		} catch (ParseException e) {
//			e.printStackTrace();
			log.info("Error", e);
		}
		return format.format(date);
	}

6、获取月份范围的起止日期

public static List<String> getStartStopTime(String startMonth, String endMonth) {
		List<String> list = new ArrayList<>();
		//开始时间
		startMonth = startMonth.substring(0,7) + "-01";
		//结束时间
		// 将字符串转换为 LocalDate 对象
		LocalDate date = LocalDate.parse(endMonth, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

		// 获取该月的最后一天
		endMonth = date.withDayOfMonth(date.lengthOfMonth()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
		list.add(startMonth);
		list.add(endMonth);

		return list;
	}

7、获取传入月份范围的全部月份的起止时间

public static Map<String,List<String>> getMonthStartEnd(String start, String end){
		Map<String,List<String>> map = new HashMap<>();
		List<String> startMonthList = new ArrayList<>();
		List<String> endMonthList = new ArrayList<>();

		// 将字符串转换为 LocalDate 对象
		LocalDate startMonth = LocalDate.parse(start, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
		LocalDate endMonth = LocalDate.parse(end, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

		// 遍历月份范围并输出每个月的开始和结束时间
		LocalDate currentMonth = startMonth;
		while (!currentMonth.isAfter(endMonth)) {
			String firstDayOfMonth = currentMonth.withDayOfMonth(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
			String lastDayOfMonth = currentMonth.withDayOfMonth(currentMonth.lengthOfMonth()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
			startMonthList.add(firstDayOfMonth);
			endMonthList.add(lastDayOfMonth);
			// 下一个月
			currentMonth = currentMonth.plusMonths(1);
		}
		map.put("start",startMonthList);
		map.put("end",endMonthList);
		return map;
	}

8、获取月份的天数

	public static int getDaysNumByYearMonth(String date) {
		int year = Integer.parseInt(date.substring(0, 4));
		int month = Integer.parseInt(date.substring(5, 7));
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, month - 1);
		calendar.set(Calendar.DATE, 1);
		calendar.roll(Calendar.DATE, -1);
		return calendar.get(Calendar.DATE);
	}

=======================2024-05-15更新============================ 

详情:日期工具类(二)

后续会继续更新。 完整代码如下:

/**
 * 日期获取工具类
 */
@Slf4j
public class DateUtils {

	//根据传入日期查询该日期前五天内全部日期,不考虑跨月情况
	public static List<String> getDatesList(String pdate) {
		List<String> datesList = new ArrayList<>();
		List<LocalDate> previousFiveDays = new ArrayList<>();
		LocalDate date2 = LocalDate.parse(pdate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

		// 逐一计算前五天的日期
		for (int i = 0; i < 5; i++) {
			//判断是不是在一个月份,如果不是,则不添加,反正则添加
//			if (date2.minusDays(i).getMonthValue() == date2.getMonthValue()) {
//				previousFiveDays.add(date2.minusDays(i));
//			}
			previousFiveDays.add(date2.minusDays(i));
		}
		// 格式化日期为字符串
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
		for (LocalDate date : previousFiveDays) {
			String day = date.format(formatter);
			datesList.add(day);
		}
		return datesList;
	}

	//根据传入的开始时间、结束时间查询该范围内的全部时间
	public static List<String> getRangeDateList(String sdate,String edate){
		LocalDate startDate = LocalDate.parse(sdate);
		LocalDate endDate = LocalDate.parse(edate);

		List<LocalDate> dateList = new ArrayList<>();
		List<String> rangeList = new ArrayList<>();
		LocalDate currentDate = startDate;

		while (!currentDate.isAfter(endDate)) {
			dateList.add(currentDate);
			currentDate = currentDate.plus(Period.ofDays(1));
		}
		//格式转换
		DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
		for (LocalDate date : dateList) {
			String day = date.format(formatter);
			rangeList.add(day);
		}

		return rangeList;
	}

	//根据月份获取该月的全部日期信息
	public static List<String> getMonthDates(String pdate){
		List<String> dateList = new ArrayList<>();
		List<Date> dates = new ArrayList<>();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		try {
			date = sdf.parse(pdate);
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(date);
			calendar.set(Calendar.DAY_OF_MONTH, 1);
			int month = calendar.get(Calendar.MONTH);
			while (calendar.get(Calendar.MONTH) == month) {
				dates.add(calendar.getTime());
				calendar.add(Calendar.DAY_OF_MONTH, 1);
			}
		} catch (ParseException e) {
			log.info("Error", e);
		}
		for (Date date1 : dates) {
			dateList.add(sdf.format(date1));
		}
		return dateList;
	}

	//获取传入月份的开始时间和结束时间
	public static List<String> getBEDateOfMonth(String month){
		List<String> dateList = new ArrayList<>();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		try {
			date = sdf.parse(month);
			Calendar calendar = Calendar.getInstance();
			calendar.setTime(date);
			// 获取给定日期所在月份的开始时间
			calendar.set(Calendar.DAY_OF_MONTH, 1);
			Date monthStartDate = calendar.getTime();
			// 获取给定日期所在月份的结束时间
			calendar.add(Calendar.MONTH, 1);
			calendar.set(Calendar.DAY_OF_MONTH, 1);
			calendar.add(Calendar.DAY_OF_MONTH, -1);
			Date monthEndDate = calendar.getTime();
			String startDate = sdf.format(monthStartDate);
			String endDate = sdf.format(monthEndDate);
			dateList.add(startDate);
			dateList.add(endDate);
		} catch (ParseException e) {
			log.info("Error", e);
		}
		return dateList;
	}

	//获取上一个月
	public static  String getLastMonth(String month) {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Date date = null;
		try {
			date = format.parse(month);
			Calendar calendar = Calendar.getInstance();
			// 设置为当前时间
			calendar.setTime(date);
			calendar.add(Calendar.MONTH,-1);
			// 设置为上一个月
			//calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);
			date = calendar.getTime();
		} catch (ParseException e) {
			log.info("Error", e);
		}
		return format.format(date);
	}

	//获取起止时间
	public static List<String> getStartStopTime(String startMonth, String endMonth) {
		List<String> list = new ArrayList<>();
		//开始时间
		startMonth = startMonth.substring(0,7) + "-01";
		//结束时间
		// 将字符串转换为 LocalDate 对象
		LocalDate date = LocalDate.parse(endMonth, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

		// 获取该月的最后一天
		endMonth = date.withDayOfMonth(date.lengthOfMonth()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
		list.add(startMonth);
		list.add(endMonth);

		return list;
	}

	//获取传入月份范围的全部月份的起止时间
	public static Map<String,List<String>> getMonthStartEnd(String start, String end){
		Map<String,List<String>> map = new HashMap<>();
		List<String> startMonthList = new ArrayList<>();
		List<String> endMonthList = new ArrayList<>();

		// 将字符串转换为 LocalDate 对象
		LocalDate startMonth = LocalDate.parse(start, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
		LocalDate endMonth = LocalDate.parse(end, DateTimeFormatter.ofPattern("yyyy-MM-dd"));

		// 遍历月份范围并输出每个月的开始和结束时间
		LocalDate currentMonth = startMonth;
		while (!currentMonth.isAfter(endMonth)) {
			String firstDayOfMonth = currentMonth.withDayOfMonth(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
			String lastDayOfMonth = currentMonth.withDayOfMonth(currentMonth.lengthOfMonth()).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
			startMonthList.add(firstDayOfMonth);
			endMonthList.add(lastDayOfMonth);
			// 下一个月
			currentMonth = currentMonth.plusMonths(1);
		}
		map.put("start",startMonthList);
		map.put("end",endMonthList);
		return map;
	}

    //获取月份的天数
	public static int getDaysNumByYearMonth(String date) {
		int year = Integer.parseInt(date.substring(0, 4));
		int month = Integer.parseInt(date.substring(5, 7));
		Calendar calendar = Calendar.getInstance();
		calendar.set(Calendar.YEAR, year);
		calendar.set(Calendar.MONTH, month - 1);
		calendar.set(Calendar.DATE, 1);
		calendar.roll(Calendar.DATE, -1);
		return calendar.get(Calendar.DATE);
	}
}

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值