当前位置: 首页 > news >正文

按日,周,月,季,年统计;获取对应的时间段

按日,周,月,季,年统计;获取对应的时间段
1.周实体类:WeekEntity.java

package com.test.common.entity;import java.time.LocalDate;public class WeekEntity {private String day;/*** 开始日期**/private LocalDate startTime;/*** 结束日期**/private LocalDate endTime;/*** 开始日期数字化**/private Integer startTimeNumber;/*** 结束日期数字化**/private Integer endTimeNumber;/*** XXXX年第XXX周**/private String yearAndWeek;public String getDay() {return day;}public void setDay(String day) {this.day = day;}public LocalDate getStartTime() {return startTime;}public void setStartTime(LocalDate startTime) {this.startTime = startTime;}public LocalDate getEndTime() {return endTime;}public void setEndTime(LocalDate endTime) {this.endTime = endTime;}public Integer getStartTimeNumber() {return startTimeNumber;}public void setStartTimeNumber(Integer startTimeNumber) {this.startTimeNumber = startTimeNumber;}public Integer getEndTimeNumber() {return endTimeNumber;}public void setEndTimeNumber(Integer endTimeNumber) {this.endTimeNumber = endTimeNumber;}public String getYearAndWeek() {return yearAndWeek;}public void setYearAndWeek(String yearAndWeek) {this.yearAndWeek = yearAndWeek;}@Overridepublic String toString() {return "WeekEntity{" +"day='" + day + '\'' +", startTime=" + startTime +", endTime=" + endTime +", startTimeNumber=" + startTimeNumber +", endTimeNumber=" + endTimeNumber +", yearAndWeek='" + yearAndWeek + '\'' +'}';}
}

2.日期工具类,有各个时间段的日期数据

package com.test.common.utils;import cn.hutool.core.date.DateUtil;
import com.test.common.entity.WeekEntity;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
import java.time.temporal.WeekFields;
import java.util.*;
import java.util.stream.Collectors;/*** 日期处理** @author * @email * @date */
public class DateUtils extends PropertyEditorSupport {/*** 时间格式(yyyy-MM-dd)*/public final static String DATE_PATTERN = "yyyy-MM-dd";/*** 时间格式(yyyyMMdd)*/public final static String PATTERN = "yyyyMMdd";/*** 时间格式(yyyy-MM-dd HH:mm:ss)*/public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";/*** 时间格式(yyyyMMddHHmmss)*/public final static String DATE_TIME_PATTERN_RULE = "yyyyMMddHHmmss";/*** 时间格式(yyyy-MM)*/public final static String DATE_YEAR_MONTH = "yyyy-MM";/*** 时间格式(yyyy-MM)*/public final static String DATE_YEAR = "yyyy";/*** 得到当前日期字符串 格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"*/public static String getDate(String pattern) {return DateFormatUtils.format(new Date(), pattern);}/*** 日期格式化 日期格式为:yyyy-MM-dd** @param date 日期* @return 返回yyyy-MM-dd格式日期*/public static String format(Date date) {return format(date, DATE_PATTERN);}/*** 日期格式化 日期格式为:yyyy-MM-dd** @param date    日期* @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN* @return 返回yyyy-MM-dd格式日期*/public static String format(Date date, String pattern) {if (date != null) {SimpleDateFormat df = new SimpleDateFormat(pattern);return df.format(date);}return null;}/*** 字符串转换成日期** @param strDate 日期字符串* @param pattern 日期的格式,如:DateUtils.DATE_TIME_PATTERN*/public static Date stringToDate(String strDate, String pattern) {if (StringUtils.isBlank(strDate)) {return null;}DateTimeFormatter fmt = DateTimeFormat.forPattern(pattern);return fmt.parseLocalDateTime(strDate).toDate();}/*** 根据周数,获取开始日期、结束日期** @param week 周期 0本周,-1上周,-2上上周,1下周,2下下周* @return 返回date[0]开始日期、date[1]结束日期*/public static Date[] getWeekStartAndEnd(int week) {DateTime dateTime = new DateTime();LocalDate date = new LocalDate(dateTime.plusWeeks(week));date = date.dayOfWeek().withMinimumValue();Date beginDate = date.toDate();Date endDate = date.plusDays(6).toDate();return new Date[]{beginDate, endDate};}/*** 对日期的【秒】进行加/减** @param date    日期* @param seconds 秒数,负数为减* @return 加/减几秒后的日期*/public static Date addDateSeconds(Date date, int seconds) {DateTime dateTime = new DateTime(date);return dateTime.plusSeconds(seconds).toDate();}/*** 对日期的【分钟】进行加/减** @param date    日期* @param minutes 分钟数,负数为减* @return 加/减几分钟后的日期*/public static Date addDateMinutes(Date date, int minutes) {DateTime dateTime = new DateTime(date);return dateTime.plusMinutes(minutes).toDate();}/*** 对日期的【小时】进行加/减** @param date  日期* @param hours 小时数,负数为减* @return 加/减几小时后的日期*/public static Date addDateHours(Date date, int hours) {DateTime dateTime = new DateTime(date);return dateTime.plusHours(hours).toDate();}/*** 对日期的【天】进行加/减** @param date 日期* @param days 天数,负数为减* @return 加/减几天后的日期*/public static Date addDateDays(Date date, int days) {DateTime dateTime = new DateTime(date);return dateTime.plusDays(days).toDate();}/*** 对日期的【周】进行加/减** @param date  日期* @param weeks 周数,负数为减* @return 加/减几周后的日期*/public static Date addDateWeeks(Date date, int weeks) {DateTime dateTime = new DateTime(date);return dateTime.plusWeeks(weeks).toDate();}/*** 对日期的【月】进行加/减** @param date   日期* @param months 月数,负数为减* @return 加/减几月后的日期*/public static Date addDateMonths(Date date, int months) {DateTime dateTime = new DateTime(date);return dateTime.plusMonths(months).toDate();}/*** 对日期的【年】进行加/减** @param date  日期* @param years 年数,负数为减* @return 加/减几年后的日期*/public static Date addDateYears(Date date, int years) {DateTime dateTime = new DateTime(date);return dateTime.plusYears(years).toDate();}/*** 得到当前时间的前N小时** @param ihour* @return*/public static String getBeforeByHourTime(int ihour) {String returnstr = "";Calendar calendar = Calendar.getInstance();calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - ihour);SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");returnstr = df.format(calendar.getTime());return returnstr;}// 获取当前时间和6小时前的时间public static Map<String, Object> dealTime(int hour) {Calendar calendar = Calendar.getInstance();Calendar calendar2 = Calendar.getInstance();SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");calendar2.add(Calendar.MINUTE, 1); //往前1分钟String etime = simpleDateFormat2.format(calendar2.getTime());int a = Calendar.HOUR_OF_DAY;calendar.set(Calendar.HOUR_OF_DAY, calendar.get((Calendar.HOUR_OF_DAY)) - hour);String stime = simpleDateFormat.format(calendar.getTime());Map<String, Object> map = new HashMap<String, Object>();map.put("stime", stime);map.put("etime", etime);return map;}/*** lxl* <p>* 返回两个时间段之间的所有日期** @param beginDate* @param endDate*/public static List<String> getDatesBetweenTwoDate(String beginDate, String endDate)throws ParseException, ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");List<String> lDate = new ArrayList<String>();Date date = null;try {date = new SimpleDateFormat("yyyy-MM-dd").parse(beginDate);} catch (ParseException e) {e.printStackTrace();}String dateString = sdf.format(date);lDate.add(dateString);Calendar cal = Calendar.getInstance();cal.setTime(sdf.parse(beginDate));boolean bContinue = true;while (bContinue) {cal.add(Calendar.DAY_OF_MONTH, 1);if (sdf.parse(endDate).after(cal.getTime())) {lDate.add(sdf.format(cal.getTime()));} else {break;}}try {date = new SimpleDateFormat("yyyy-MM-dd").parse(beginDate);} catch (ParseException e) {e.printStackTrace();}String entrs = sdf.format(date);if (!dateString.equals(entrs)) {lDate.add(entrs);}return lDate;}//返回两个时间段之间的所有月包含最后一个月public static List<String> getMonthBetweenTwoDateIncludeEndDate(String beginDate, String endDate)throws ParseException, ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");List<String> lDate = new ArrayList<String>();Date date = null;try {date = new SimpleDateFormat("yyyy-MM").parse(beginDate);} catch (ParseException e) {e.printStackTrace();}String dateString = sdf.format(date);lDate.add(dateString);Calendar cal = Calendar.getInstance();cal.setTime(sdf.parse(beginDate));boolean bContinue = true;while (bContinue) {cal.add(Calendar.MONTH, 1);if (sdf.parse(endDate).after(cal.getTime())) {lDate.add(sdf.format(cal.getTime()));} else {break;}}try {date = new SimpleDateFormat("yyyy-MM").parse(endDate);} catch (ParseException e) {e.printStackTrace();}String entrs = sdf.format(date);if (!dateString.equals(entrs)) {lDate.add(entrs);}return lDate;}//返回两个时间段之间的所有日期包含最后一天public static List<String> getDatesBetweenTwoDateIncludeEndDate(String beginDate, String endDate)throws ParseException, ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");List<String> lDate = new ArrayList<String>();Date date = null;try {date = new SimpleDateFormat("yyyy-MM-dd").parse(beginDate);} catch (ParseException e) {e.printStackTrace();}String dateString = sdf.format(date);lDate.add(dateString);Calendar cal = Calendar.getInstance();cal.setTime(sdf.parse(beginDate));boolean bContinue = true;while (bContinue) {cal.add(Calendar.DAY_OF_MONTH, 1);if (sdf.parse(endDate).after(cal.getTime())) {lDate.add(sdf.format(cal.getTime()));} else {break;}}try {date = new SimpleDateFormat("yyyy-MM-dd").parse(endDate);} catch (ParseException e) {e.printStackTrace();}String entrs = sdf.format(date);if (!dateString.equals(entrs)) {lDate.add(entrs);}return lDate;}/*** lxl* <p>* 获得两个时间段之内的所有日期小时:例如传参数:"2018-12-06 01"和"2018-12-06 23", 返回结果:[2018-12-06 01,* 2018-12-06 02, 2018-12-06 03, 2018-12-06 04, ......, 2018-12-06 23]** @param beginDate* @param endDate*/public static List<String> getHoursBetweenTwoDate(String beginDate, String endDate)throws ParseException, ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH");List<String> lDate = new ArrayList<String>();Date date = null;try {date = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(beginDate);} catch (ParseException e) {e.printStackTrace();}String dateString = sdf.format(date);lDate.add(dateString);Calendar cal = Calendar.getInstance();cal.setTime(sdf.parse(beginDate));boolean bContinue = true;while (bContinue) {cal.add(Calendar.HOUR, 1);if (sdf.parse(endDate).after(cal.getTime())) {lDate.add(sdf.format(cal.getTime()));} else {break;}}try {date = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(endDate);} catch (ParseException e) {e.printStackTrace();}String endstr = sdf.format(date);lDate.add(endstr);return lDate;}/*** lxl* 获得两个时间段内所有的分钟,例如:传参“2018-11-20 00:00”和“2018-11-22 23:59”, 将会返回["2018-11-20* 00:01","2018-11-20 00:02","2018-11-20 00:03"......,"2018-11-22* 23:58","2018-11-22 23:59"]** @param beginDate* @param endDate* @return*/public static List<String> getMinuteBetweenTwoDate(String beginDate, String endDate)throws ParseException, ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");List<String> lDate = new ArrayList<String>();lDate.add(beginDate);// 把开始时间加入集合Calendar cal = Calendar.getInstance();// 使用给定的 Date 设置此 Calendar 的时间cal.setTime(sdf.parse(beginDate));boolean bContinue = true;while (bContinue) {// 根据日历的规则,为给定的日历字段添加或减去指定的时间量cal.add(Calendar.MINUTE, 1);// 测试此日期是否在指定日期之后if (sdf.parse(endDate).after(cal.getTime())) {lDate.add(sdf.format(cal.getTime()));} else {break;}}lDate.add(endDate);// 把结束时间加入集合return lDate;}/*** 获得某天所有的分钟** @param day* @return* @throws ParseException* @throws ParseException*/public static List<String> getMinutes(String day) throws ParseException, ParseException {List<String> minuteList = getMinuteBetweenTwoDate(day + " 00:00", day + " 23:59");return minuteList;}/*** 获得i以内的随机整数** @param i* @return*/public static String getSecond(int i) {long l = Math.round(Math.random() * i);if (l < 10) {return "0" + l;} else {if (l != i) {return "" + l;} else {return l - 1 + "";}}}/*** 获得i以内的随机数,保留两位小数** @param i* @return*/public static String getRandom(int i) {double d = Math.random() * i;return String.format("%.2f", d);}//获取两个时间之间的小时数public static int getDayNum(String stime, String etime) {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date now = null;Date date = null;try {now = df.parse(etime);date = df.parse(stime);} catch (ParseException e) {e.printStackTrace();}long l = now.getTime() - date.getTime();int day = (int) l / (24 * 60 * 60 * 1000);int hour = (int) (l / (60 * 60 * 1000));int min = (int) ((l / (60 * 1000)));int s = (int) (l / 1000);
//		System.out.println(""+day+"天"+hour+"小时"+min+"分"+s+"秒");return hour;}//获取两个时间之间的小时数public static int getHourNums(String stime, String etime) {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date now = null;Date date = null;try {now = df.parse(etime);date = df.parse(stime);} catch (ParseException e) {e.printStackTrace();}long l = now.getTime() - date.getTime();int day = (int) l / (24 * 60 * 60 * 1000);int hour = (int) (l / (60 * 60 * 1000));int min = (int) ((l / (60 * 1000)));int s = (int) (l / 1000);
//		System.out.println(""+day+"天"+hour+"小时"+min+"分"+s+"秒");return hour;}//获取两个时间之间的天数public static int getDayNums(String stime, String etime) {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date now = null;Date date = null;try {now = df.parse(etime);date = df.parse(stime);} catch (ParseException e) {e.printStackTrace();}long l = now.getTime() - date.getTime();int day = (int) l / (24 * 60 * 60 * 1000);int hour = (int) (l / (60 * 60 * 1000));int min = (int) ((l / (60 * 1000)));int s = (int) (l / 1000);
//		System.out.println(""+day+"天"+hour+"小时"+min+"分"+s+"秒");return day;}/*** lxl* 返回两个时间段之间的所有日期* 动态设置时间格式** @param beginDate* @param endDate*/public static List<String> getDatesBetweenT(String beginDate, String endDate, String simpleFormat)throws ParseException, ParseException {SimpleDateFormat sdf = new SimpleDateFormat(simpleFormat);List<String> lDate = new ArrayList<String>();Date date = null;try {date = new SimpleDateFormat(simpleFormat).parse(beginDate);} catch (ParseException e) {e.printStackTrace();}String dateString = sdf.format(date);lDate.add(dateString);Calendar cal = Calendar.getInstance();cal.setTime(sdf.parse(beginDate));boolean bContinue = true;while (bContinue) {cal.add(Calendar.DAY_OF_MONTH, 1);if (sdf.parse(endDate).after(cal.getTime())) {lDate.add(sdf.format(cal.getTime()));} else {break;}}try {date = new SimpleDateFormat(simpleFormat).parse(beginDate);} catch (ParseException e) {e.printStackTrace();}String entrs = sdf.format(date);if (!dateString.equals(entrs)) {lDate.add(entrs);}return lDate;}/*** @param minDate* @param maxDate* @return* @throws ParseException lxl*                        获得两段时间内的所有月份*/public static List<String> getMonthBetween(String minDate, String maxDate) throws ParseException {ArrayList<String> result = new ArrayList<String>();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");Calendar min = Calendar.getInstance();Calendar max = Calendar.getInstance();min.setTime(sdf.parse(minDate));min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1);max.setTime(sdf.parse(maxDate));max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2);Calendar curr = min;while (curr.before(max)) {result.add(sdf.format(curr.getTime()));curr.add(Calendar.MONTH, 1);}return result;}/*** @return* @throws ParseException lxl*                        返回两个时期 共有多少天。*/public static int daysOfTwo_2(String stime, String etime) throws ParseException {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");/*** 跨年不会出现问题*/Date fDate = sdf.parse(stime);Date oDate = sdf.parse(etime);Long a = ((oDate.getTime() - fDate.getTime()) / (1000 * 3600 * 24));int days = a.intValue();return days;}/*** 获得当前系统时间*/public static String getNowDate() {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return df.format(new Date());}/*** 获得月份的所有日期*/public static int getDaysOfMonth(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);return calendar.getActualMaximum(Calendar.DAY_OF_MONTH);}/*** 获取某年第一天日期** @param year 年份* @return Date*/public static Date getCurrYearFirst(int year) {Calendar calendar = Calendar.getInstance();calendar.clear();calendar.set(Calendar.YEAR, year);Date currYearFirst = calendar.getTime();return currYearFirst;}/*** 获取某年最后一天日期** @param year 年份* @return Date*/public static Date getCurrYearLast(int year) {Calendar calendar = Calendar.getInstance();calendar.clear();calendar.set(Calendar.YEAR, year);calendar.roll(Calendar.DAY_OF_YEAR, -1);Date currYearLast = calendar.getTime();return currYearLast;}/*** 获取指定日期分钟** @param date* @return*/public static int getRightMinute(Date date) {Calendar c = Calendar.getInstance();c.setTime(date);return c.get(Calendar.MINUTE);}/*** 获取指定时间 加上/减去指定的分钟** @return*/public static Date getRightDate(Date date, int minute) {Calendar c = Calendar.getInstance();c.setTime(date);c.add(Calendar.MINUTE, minute);return c.getTime();}/*** 得到当前年份字符串 格式(yyyy)*/public static String getYear() {return formatDate(new Date(), "yyyy");}/*** 得到日期字符串 默认格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss" "E"*/public static String formatDate(Date date, Object... pattern) {String formatDate = null;if (pattern != null && pattern.length > 0) {formatDate = DateFormatUtils.format(date, pattern[0].toString());} else {formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");}return formatDate;}/*** 得到当前月份字符串 格式(MM)*/public static String getMonth() {return formatDate(new Date(), "MM");}/*** 得到当天字符串 格式(dd)*/public static String getDay() {return formatDate(new Date(), "dd");}/*** @Description:    获取一个日期的所在月的开始和结束时间"2016-02-05 00:00:00"->"2016-02-05 00:00:00"  "2016-02-05 00:00:00"* @Author:         cjk* @CreateDate:     2019/8/14*/public static Map<String,Object> getYearToMonthStartEnd(String dateStr){SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar c = Calendar.getInstance();Calendar c1 = Calendar.getInstance();try {c.setTime(sdf.parse(dateStr));c.add(Calendar.MONTH, 0);//设置为1号,当前日期既为本月第一天c.set(Calendar.DAY_OF_MONTH, 1);c1.setTime(sdf.parse(dateStr));c1.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));c1.set(Calendar.HOUR_OF_DAY, 23);c1.set(Calendar.MINUTE, 59);c1.set(Calendar.SECOND, 59);} catch (ParseException e) {e.printStackTrace();}Map<String,Object> map = new HashMap<>();map.put("stime",DateUtils.formatDate(c.getTime(),"yyyy-MM-dd HH:mm:ss"));map.put("etime",DateUtils.formatDate(c1.getTime(),"yyyy-MM-dd HH:mm:ss"));return map;}/*** 根据开始时间,结束时间 获取中间所有周** @param startTime* @param endTime* @return*/public static List<WeekEntity> getWeekList(java.time.LocalDate startTime, java.time.LocalDate endTime) {List<WeekEntity> resultList = new ArrayList<WeekEntity>();java.time.format.DateTimeFormatter df = java.time.format.DateTimeFormatter.ofPattern("yyyyMMdd");//判断是否同一周WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY, 4);if (startTime.get(weekFields.weekOfWeekBasedYear()) == endTime.get(weekFields.weekOfWeekBasedYear())) {WeekEntity firstWeek = new WeekEntity();firstWeek.setDay(startTime + "~" + endTime);firstWeek.setStartTime(startTime);firstWeek.setEndTime(endTime);firstWeek.setStartTimeNumber(Integer.valueOf(df.format(startTime)));firstWeek.setEndTimeNumber(Integer.valueOf(df.format(endTime)));resultList.add(firstWeek);return resultList;}//开始周TemporalAdjuster FIRST_OF_WEEK = TemporalAdjusters.ofDateAdjuster(localDate -> localDate.minusDays(localDate.getDayOfWeek().getValue() - DayOfWeek.MONDAY.getValue()));java.time.LocalDate startFirstWeek = startTime.with(FIRST_OF_WEEK);  //开始周开始日期TemporalAdjuster LAST_OF_WEEK = TemporalAdjusters.ofDateAdjuster(localDate -> localDate.plusDays(DayOfWeek.SUNDAY.getValue() - localDate.getDayOfWeek().getValue()));java.time.LocalDate endFirstWeek = startTime.with(LAST_OF_WEEK);     //开始周结束日期//结束周TemporalAdjuster FIRST_OF_WEEK1 = TemporalAdjusters.ofDateAdjuster(localDate -> localDate.minusDays(localDate.getDayOfWeek().getValue() - DayOfWeek.MONDAY.getValue()));java.time.LocalDate startLastWeek = endTime.with(FIRST_OF_WEEK1);TemporalAdjuster LAST_OF_WEEK1 = TemporalAdjusters.ofDateAdjuster(localDate -> localDate.plusDays(DayOfWeek.SUNDAY.getValue() - localDate.getDayOfWeek().getValue()));java.time.LocalDate endLastWeek = endTime.with(LAST_OF_WEEK1);//将第一周添加WeekEntity firstWeek = new WeekEntity();firstWeek.setDay(startTime + "~" + endFirstWeek);firstWeek.setStartTime(startTime);firstWeek.setEndTime(endFirstWeek);firstWeek.setStartTimeNumber(Integer.valueOf(df.format(startTime)));firstWeek.setEndTimeNumber(Integer.valueOf(df.format(endFirstWeek)));resultList.add(firstWeek);while (true) {startFirstWeek = startFirstWeek.plusDays(7);if (startFirstWeek.with(LAST_OF_WEEK).equals(startLastWeek.with(LAST_OF_WEEK1))) {break;} else {WeekEntity week = new WeekEntity();week.setDay(startFirstWeek.with(FIRST_OF_WEEK) + "~" + startFirstWeek.with(LAST_OF_WEEK));week.setStartTime(startFirstWeek.with(FIRST_OF_WEEK));week.setEndTime(startFirstWeek.with(LAST_OF_WEEK));week.setStartTimeNumber(Integer.valueOf(df.format(startFirstWeek.with(FIRST_OF_WEEK))));week.setEndTimeNumber(Integer.valueOf(df.format(startFirstWeek.with(LAST_OF_WEEK))));resultList.add(week);//System.out.println("日期="+startFirstWeek+"开始周="+startFirstWeek.with(FIRST_OF_WEEK)+"结束周="+startFirstWeek.with(LAST_OF_WEEK));}}WeekEntity lastWeek = new WeekEntity();lastWeek.setDay(startLastWeek + "~" + endTime);lastWeek.setStartTime(startLastWeek);lastWeek.setEndTime(endTime);lastWeek.setStartTimeNumber(Integer.valueOf(df.format(startLastWeek)));lastWeek.setEndTimeNumber(Integer.valueOf(df.format(endTime)));resultList.add(lastWeek);return resultList;}/*** 字符串转LocalDate* @param date* @return*/public static java.time.LocalDate getLocalDateByDateStr(String date) {Instant instant = DateUtil.parse(date).toInstant();ZoneId zone = ZoneId.systemDefault();LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);java.time.LocalDate localDate = localDateTime.toLocalDate();return localDate;}/*** 根据日期获取所属第几周* @param date* @return*/public static int getWeekNum(String date) {Instant instant = DateUtil.parse(date).toInstant();ZoneId zone = ZoneId.systemDefault();LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);java.time.LocalDate localDate = localDateTime.toLocalDate();// WeekFields.ISO = 一星期从周一开始算, 其它的请自己摸索.WeekFields weekFields = WeekFields.ISO;int weekNumber = localDate.get(weekFields.weekOfWeekBasedYear());return weekNumber;}/*** 根据日期获取所属第几周* @param date* @return*/public static String getWeekAndYear(Date date){int year = DateUtil.year(date);Instant instant = date.toInstant();ZoneId zone = ZoneId.systemDefault();LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);java.time.LocalDate localDate= localDateTime.toLocalDate();// WeekFields.ISO = 一星期从周一开始算, 其它的请自己摸索.WeekFields weekFields = WeekFields.ISO;int weekNumber = localDate.get(weekFields.weekOfWeekBasedYear());return year + "年第" + weekNumber + "周";}/*** 获取时间段内所有季度** @param startTime 开始时间* @param endTime   结束时间*/public static List<String> getSeasonList(java.time.LocalDate startTime, java.time.LocalDate endTime) {// 取当月第一天, 避免startTime的日期大于endTime计算不出来的情况startTime = java.time.LocalDate.of(startTime.getYear(), startTime.getMonthValue(), 1);endTime = java.time.LocalDate.of(endTime.getYear(), endTime.getMonthValue(), 1);Set<String> set = new HashSet<>();java.time.LocalDate mark = startTime;while (true) {if (mark.isBefore(endTime) || mark.isEqual(endTime)) {String season = String.valueOf(mark.getYear()) + String.valueOf((mark.getMonthValue() + 2) / 3);set.add(season);// 加一个月mark = mark.plusMonths(1);} else {break;}}// set中是倒序, 重新排序return set.stream().sorted().collect(Collectors.toList());}/*** 获取两个日期之间的所有年** @param startTime* @param endTime* @return:list*/public static List<String> getYearBetweenDate(String startTime, String endTime) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy");// 声明保存日期集合List<String> list = new ArrayList<>();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);//把年数增加 1calendar.add(Calendar.YEAR, 1);// 获取增加后的日期startDate = calendar.getTime();}} catch (Exception e) {e.printStackTrace();}return list;}/*** 根据日期获取季度* @param dateStr* @return*/public static String getYearAndQuarter(String dateStr){Date date = DateUtil.parse(dateStr);int year = DateUtil.year(date);Calendar calendar = Calendar.getInstance();calendar.setTime(date);int month = calendar.get(Calendar.MONTH)+1;int quarter = (month-1)/3 + 1;return  year  + "" + quarter;
//        return  year + "年" + quarter + "季度";}/*** 根据日期获取季度* @param dateStr* @return*/public static String convertQuarter(String dateStr){if(dateStr.length() == 5)  {return  dateStr.substring(0,4) + "年" + dateStr.substring(4,5) + "季度";}else{return "";}}/*** 根据yyyy-MM-dd日期获取年份* @param date* @return*/public static  String getYear(String date){String[] yearArray = date.split("-");return yearArray[0];}
}

PropertyEditorSupport.java没有实际使用可去掉;

相关文章:

按日,周,月,季,年统计;获取对应的时间段

按日&#xff0c;周&#xff0c;月&#xff0c;季&#xff0c;年统计&#xff1b;获取对应的时间段 1.周实体类&#xff1a;WeekEntity.java package com.test.common.entity;import java.time.LocalDate;public class WeekEntity {private String day;/*** 开始日期**/privat…...

【eNSP】交换机(vlan和vlan间通信)

【eNSP】交换机&#xff08;vlan和vlan间通信&#xff09; 原理术语过程 实验根据图片连接模块配置设备名称和IP地址配置交换机交换机链路指定sw1配置sw2配置 设置网关交换机互联实验设置查看设置结果 ospf配置 原理 HUB集线器&#xff1a;它的作用可以简单的理解为将一些机器…...

2011年下半年 软件设计师 上午试卷2

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…...

Linux中安装MySQL8版本,安装MySQL步骤,MySQL8离线安装

Linux中安装MySQL8版本的步骤如下&#xff1a; 1.检查下libaio.so.1的位置 [roottdx ]# whereis libaio.so.1 libaio.so: /usr/lib64/libaio.so.1 如果没有找到该文件 (1).在线安装 [roottdx ]# yum install -y libaio (2).离线安装&#xff1a; 上传之后执行命令安装&#…...

MES生产管理系统如何与ERP系统集成

MES生产管理系统和ERP企业管理系统是制造企业信息化的重要组成部分&#xff0c;它们在生产管理、资源计划和业务流程等方面发挥着重要作用。实现MES与ERP系统的集成&#xff0c;可以更好地优化企业生产流程&#xff0c;提高生产效率和降低成本。本文将探讨MES管理系统解决方案如…...

Kafka如何保证消息⼀定能被消费

Kafka 通过多种机制来保证消息一定能被消费&#xff0c;从而实现数据的可靠性和持久性。 以下是一些常见的方法和策略来提高消息的可靠性&#xff1a; 复制机制&#xff1a; Kafka 使用了分区和副本的概念。每个分区可以有多个副本&#xff0c;分布在不同的 Broker 上。当消息…...

[USACO1.5] 八皇后 Checker Challenge

题目描述 一个如下的 6 x 6 的跳棋棋盘&#xff0c;有六个棋子被放置在棋盘上&#xff0c;使得每行、每列有且只有一个&#xff0c;每条对角线&#xff08;包括两条主对角线的所有平行线&#xff09;上至多有一个棋子。 上面的布局可以用序列 2 4 6 1 3 5 来描述&#xff0c;第…...

【Mysql】MVCC版本机制的多并发

&#x1f307;个人主页&#xff1a;平凡的小苏 &#x1f4da;学习格言&#xff1a;命运给你一个低的起点&#xff0c;是想看你精彩的翻盘&#xff0c;而不是让你自甘堕落&#xff0c;脚下的路虽然难走&#xff0c;但我还能走&#xff0c;比起向阳而生&#xff0c;我更想尝试逆风…...

Vue--》打造个性化医疗服务的医院预约系统(六)

今天开始使用 vue3 + ts 搭建一个医院预约系统的前台页面,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关…...

Unity ARFoundation 配置工程 (Android)

注意&#xff1a; 1、AR Core是Google的产品&#xff0c;因为谷歌制裁华为&#xff0c;所以 有些 华为机可能不支持AR Core的软件&#xff1b; 2、手机在设置里搜索Google Play&#xff0c;看看是否已经安装上了&#xff0c;如果没有装此服务&#xff0c;去商城里搜索Google Pl…...

【广州虚拟现实开发】VR智能中控系统进一步提高VR教学管理水平

随着科技的不断发展&#xff0c;虚拟现实(VR)技术已经逐渐走进了人们的生活。在教育领域&#xff0c;VR技术也得到了广泛的应用&#xff0c;尤其是在教学终端中控系统方面。那么&#xff0c;广州华锐互动开发的VR智能中控系统对学校有何益处呢&#xff1f; 首先&#xff0c;VR智…...

关于WordPress 的时间倒计时

点击跳转...

极光笔记 | 如何为您的业务开发和训练一个AI-BOT

生成式AI&#xff08;Generative AI&#xff09;是当今科技领域的前沿技术之一。随着数据量的不断增加和计算能力的不断提升&#xff0c;AI技术在企业和个人生活中的应用越来越广泛。AI-BOT&#xff08;以下简称BOT&#xff09;是生成式AI技术的其中一种重要的应用形式&#xf…...

如何给ELK日志加上索引

问题记录 1、遇到长流程的时候&#xff0c;日志记录是非常重要的。如何排查日志&#xff0c;可以在MDC中去put对应的值&#xff0c;这样就等于对你关心的关键字段加上了索引&#xff0c;在elk中可以通过该索引就能 容易排查到问题 logback的设置 可以参照&#xff1a; 【总体…...

elementUI遇到的问题记录

一、 组件&#xff1a;el-table 问题&#xff1a;使用动态数据创建多级表头后&#xff0c;刷新页面时&#xff0c;table行会串行&#xff0c;某些列丢失&#xff0c;图片列未显示图片 解决方案&#xff1a;给el-table增加key <el-table :key"${Matn.random()}${ite…...

计算机竞赛 协同过滤电影推荐系统

文章目录 1 简介1 设计概要2 课题背景和目的3 协同过滤算法原理3.1 基于用户的协同过滤推荐算法实现原理3.1.1 步骤13.1.2 步骤23.1.3 步骤33.1.4 步骤4 4 系统实现4.1 开发环境4.2 系统功能描述4.3 系统数据流程4.3.1 用户端数据流程4.3.2 管理员端数据流程 4.4 系统功能设计 …...

网络综合布线实训室建设方案

一、网络综合布线系统概述 网络综合布线系统是为了满足数据通信需求而设计和建立的一套基础设施。它提供了数据传输、信号传输和电力供应的基础结构&#xff0c;支持各种网络设备和终端设备之间的连接。 网络综合布线系统通常包括以下组成部分&#xff1a; 1&#xff09; 数据…...

【山河送书第七期】:《强化学习:原理与Python实战》揭秘大模型核心技术RLHF!

《强化学习&#xff1a;原理与Python实战》揭秘大模型核心技术RLHF&#xff01; 一图书简介二RLHF是什么&#xff1f;三RLHF适用于哪些任务&#xff1f;四RLHF和其他构造奖励模型的方法相比有何优劣&#xff1f;五什么样的人类反馈才是好反馈&#xff1f;六如何减小人类反馈带来…...

LeetCode 400. 第 N 位数字——JAVA

题目描述&#xff1a; 给你一个整数 n &#xff0c;请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ...] 中找出并返回第 n 位上的数字。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;3示例 2&#xff1a; 输入&#xff1a;n 11 输出&#xff1…...

解决生成式AI落地之困,亚马逊云科技提供完整解决方案

生成式AI技术无疑是当前最大的时代想象力之一。 资本、创业者、普通人都在涌入生成式AI里去一探究竟&#xff1a;“百模大战”连夜打响&#xff0c;融资规模连创新高&#xff0c;各种消费类产品概念不断涌现……根据Bloomberg Intelligence 的报告&#xff0c;2022年生成式AI 市…...

【5款登录验证校验】基于jquery实现的5款登录验证码组件(附完整源码)

文章目录 写在前面涉及知识点1、随机字母验证码1.1 效果1.2 实现源码 2、数字运算验证码2.1 效果2.2 实现源码 3、滑块验证码3.1 效果3.2 实现源码 4、图片补全验证码4.1 效果4.2 实现源码 5、顺序点选验证码5.1 效果5.2 实现源码 6、源码分享6.1 百度网盘6.2 123网盘6.3 邮箱留…...

数据结构的树存储结构

数据结构的树存储结构 之前介绍的所有的数据结构都是线性存储结构。本章所介绍的树结构是一种非线性存储结构&#xff0c;存储的是具有“一对多”关系的数据元素的集合。 (A) (B) 图 1 树的示例 图 …...

linux--epoll

epoll 参考文献 https://www.cnblogs.com/lojunren/p/3856290.html https://www.51cto.com/article/717096.html linux下的I/O复用epoll详解 要深刻理解epoll&#xff0c;首先得了解epoll的三大关键要素&#xff1a;mmap、红黑树、链表。 IO多路复用 首先需要了解什么是IO多…...

async和await

一&#xff0c;基本使用 其实就是之前学过的异步函数&#xff0c;异步编程在函数前写一个ansyc&#xff0c;就转化为异步函数&#xff0c;返回的是一个promise对象&#xff0c;于是就可以使用await关键字&#xff0c;可以把异步函数写成同步函数的形式&#xff0c;极大地提高代…...

如何从cpu改为gpu,pytorch,cuda

1.cmd输入nvcc -V 2.得到 cuda版本后&#xff0c;去pytorch官网 3.根据自己的cuda进行选择 4.复制上述链接&#xff0c;进入cmd 5.cmd中输入activate XXX,这里的"XXX"指代自己在工程中用到的环境 6.进入后&#xff0c;将刚才链接粘贴&#xff0c;回车等待下载结束 …...

JavaScript简介--语句--变量

目录 JavaScript简介 为什么学习 JavaScript JavaScript与ECMAScript的关系 JavaScript版本 JavaScript语句、标识符 语句 标识符 JavaScript保留关键字 变量 变量的命名规则 数据类型 变量的重新赋值 变量提升 运算符 条件语句 循环语句 JavaScript简介 JavaScri…...

Windows CMD 关闭,启动程序

Windows CMD 关闭&#xff0c;启动程序 1. Windows 通过 CMD 命令行关闭程序 示例&#xff1a;通过 taskkill 命令关闭 QQ 管家&#xff0c;但是这里有个问题&#xff0c;使用命令行关闭 QQ 管家时&#xff0c;会提示“错误: 无法终止 PID 1400 (属于 PID 22116 子进程)的进程…...

统计XML标注文件中各标注类别的标签数量

目标检测任务重&#xff0c;担心数据集中各标签类别不均衡&#xff0c;想统计XML标注文件中各标注类别的标签数量&#xff0c;可以使用以下脚本&#xff1a; import os import glob import xml.etree.ElementTree as etdef count_labels(source_dir):file_list glob.glob(os.…...

一百六十、Kettle——Linux上安装的Kettle9.2.0连接Hive3.1.2

一、目标 Kettle9.2.0在Linux上安装好后&#xff0c;需要与Hive3.1.2数据库建立连接 之前已经在本地上用kettle9.2.0连上Hive3.1.2 二、各工具版本 &#xff08;一&#xff09;kettle9.2.0 kettle9.2.0安装包网盘链接 链接&#xff1a;https://pan.baidu.com/s/15Zq9w…...

C++新经典03--共用体、枚举类型与typedef

共用体 共用体&#xff0c;也叫联合&#xff0c;有时候需要把几种不同类型的变量存放到同一段内存单元&#xff0c;例如&#xff0c;把一个整型变量、一个字符型变量、一个字符数组放在同一个地址开始的内存单元中。这三个变量在内存中占的字节数不同&#xff0c;但它们都从同…...