几个设置时间段查询(between startTime and andTime)的通用方法用于

1:查某一年的数据(某年的1月1日0点0分0秒-某年的12月最后一天11.59.59)

public static void setStartEndYear(String year, Consumer<Long> setStartTime, Consumer<Long> setEndTime) {
		setStartEndYear(year, setStartTime, setEndTime, null);
	}

	public static void setStartEndYear(String year, Consumer<Long> setStartTime, Consumer<Long> setEndTime, Integer month) {
		if (isNull(year)) {
			return;
		}
		int yearInt = Integer.parseInt(year);
		Date startTime = getFirstDayOfYearMonth(yearInt, null == month ? 1 : month);
		Date endTime = getLastDayOfYearMonth(yearInt, null == month ? 12 : month);
		setStartTime.accept(startTime.getTime());
		setEndTime.accept(endTime.getTime());
	}


2:开始结束时间

	public static void setStartEndTime(Long startDate, Long endDate, Consumer<Long> setStartTime, Consumer<Long> setEndTime) {
		if (null != startDate && null == endDate) {
			setStartTime.accept(startDate);
			setEndTime.accept(System.currentTimeMillis());
		} else if (null == startDate && null != endDate) {
			setStartTime.accept(Long.MIN_VALUE);
			setEndTime.accept(endDate);
		} else if (null != startDate && null != endDate) {
			setStartTime.accept(startDate);
			setEndTime.accept(endDate);
		}
	}

3:查询某个年龄段的人的数据

	public static void setStartEndAge(Integer startAge, Integer endAge, Consumer<Long> setStartTime, Consumer<Long> setEndTime) {
		if (isNotNull(startAge, endAge)) {
			setStartTime.accept(computerStartTime(endAge));
			setEndTime.accept(computerEndTime(startAge));
		}
	}


	private static Long computerStartTime(Integer endAge) {// 50
		if (isNull(endAge)) {
			return Long.MIN_VALUE;
		}
		DateTime now = new DateTime();
		int year = now.getYear();
		int month = now.getMonthOfYear();
		int endYear = year - endAge;
		Date date = getFirstDayOfYearMonth(endYear, month);
		return date.getTime();
	}
	private static Long computerEndTime(Integer startAge) {// 40
		if (isNull(startAge)) {
			return System.currentTimeMillis();
		}
		DateTime now = new DateTime();
		int year = now.getYear();
		int month = now.getMonthOfYear();
		int endYear = year - startAge;
		Date date = getLastDayOfYearMonth(endYear, month);
		return date.getTime();
	}
	private static Date getFirstDayOfYearMonth(int year, int month) {
		Calendar cal = Calendar.getInstance();
		// 设置年份
		cal.set(Calendar.YEAR, year);
		// 设置月份
		cal.set(Calendar.MONTH, month - 1);
		// 获取某月最大天数
		int lastDay = cal.getActualMinimum(Calendar.DAY_OF_MONTH);
		// 设置日历中月份的最大天数
		cal.set(Calendar.DAY_OF_MONTH, lastDay);
		// 格式化日期
		cal.set(Calendar.HOUR_OF_DAY, 0);

		cal.set(Calendar.MINUTE, 0);

		cal.set(Calendar.SECOND, 0);
		return cal.getTime();
	}
	private static Date getLastDayOfYearMonth(int year, int month) {
		Calendar cal = Calendar.getInstance();
		// 设置年份
		cal.set(Calendar.YEAR, year);
		// 设置月份
		cal.set(Calendar.MONTH, month - 1);
		// 获取某月最大天数
		int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
		// 设置日历中月份的最大天数
		cal.set(Calendar.DAY_OF_MONTH, lastDay);
		// 格式化日期
		cal.set(Calendar.HOUR_OF_DAY, 23);

		cal.set(Calendar.MINUTE, 59);

		cal.set(Calendar.SECOND, 59);
		return cal.getTime();
	}

使用示例:

//年份
private void toSetBelectedYear(UserQuery q) {
	DrinDateUtils.setStartEndYear(belectedYear, s -> q.setStartBelectedTime(s), e -> q.setEndBelectedTime(e));
}

//生日
private void setStartEndAge(UserQuery q) {
	DrinDateUtils.setStartEndAge(this.startBirthday, this.endBirthday, startBirth -> q.setStartBirthday(startBirth), endBirth -> q.setStartBirthday(endBirth));
}
//日期
private void toSetCreateDate(UserQuery q) {
	DrinDateUtils.setStartEndYear(this.startTime,this.endTime, s -> q.setStartCreateTime(s), e -> q.setEndCreateTime(e));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值