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));
}