|
@@ -1,10 +1,17 @@
|
|
|
package com.qs.mp.common.utils;
|
|
|
|
|
|
import java.lang.management.ManagementFactory;
|
|
|
+import java.text.DateFormat;
|
|
|
import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
import java.util.Calendar;
|
|
|
import java.util.Date;
|
|
|
+import java.util.GregorianCalendar;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
import org.apache.commons.lang3.time.DateFormatUtils;
|
|
|
import org.joda.time.DateTime;
|
|
|
import org.joda.time.Days;
|
|
@@ -12,6 +19,8 @@ import org.joda.time.Months;
|
|
|
import org.joda.time.format.DateTimeFormat;
|
|
|
import org.joda.time.format.DateTimeFormatter;
|
|
|
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+
|
|
|
/**
|
|
|
* 时间工具类
|
|
|
*
|
|
@@ -235,4 +244,203 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+ // 首页统计日期处理
|
|
|
+ /**
|
|
|
+ * @Title: getDateOfWeek
|
|
|
+ * @Description: 获取两个时间内所有周之间的时间段,并且获得是今年第几周
|
|
|
+ * @param start_time 开始时间
|
|
|
+ * @param end_time 结束时间
|
|
|
+ */
|
|
|
+ public static List<Map<String,Object>> getDateOfWeek(Date startTime, Date endTime) {
|
|
|
+ List<Map<String,Object>> rtnList = new ArrayList<Map<String,Object>>();
|
|
|
+ try {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+
|
|
|
+ Calendar startCalendar = Calendar.getInstance();
|
|
|
+ startCalendar.setTime(startTime);
|
|
|
+
|
|
|
+ Calendar endCalendar = Calendar.getInstance();
|
|
|
+ endCalendar.setTime(endTime);
|
|
|
+
|
|
|
+ String firstWeekDay = getFirstDayOfWeek(startTime); // 取得开始日期指定日期所在周的第一天
|
|
|
+ String lastWeekDay = getLastDayOfWeek(endTime); // 取得结束日期指定日期所在周的最后一天
|
|
|
+
|
|
|
+ // 开始日期所在的周
|
|
|
+ int startWeekOfYear = startCalendar.get(Calendar.WEEK_OF_YEAR);
|
|
|
+ System.out.println("startWeekOfYear == " +startWeekOfYear);
|
|
|
+
|
|
|
+ //截止日期所在的周
|
|
|
+ int endWeekOfYear = endCalendar.get(Calendar.WEEK_OF_YEAR);
|
|
|
+ System.out.println("currentWeekOfYear_e == " +endWeekOfYear);
|
|
|
+
|
|
|
+ int j = 12;
|
|
|
+ for (int i=0; i < endWeekOfYear; i++) {
|
|
|
+
|
|
|
+ //只取两个日期之间的周
|
|
|
+ if(startWeekOfYear > endWeekOfYear - i){
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ int dayOfWeek = endCalendar.get(Calendar.DAY_OF_WEEK) - 2;
|
|
|
+
|
|
|
+ System.out.println("dayOfWeek == " +dayOfWeek);
|
|
|
+ List<String> list = new ArrayList<>();
|
|
|
+
|
|
|
+ endCalendar.add(Calendar.DATE, - dayOfWeek); //得到本周的第一天
|
|
|
+ String s_date = sdf.format(endCalendar.getTime());
|
|
|
+
|
|
|
+ Long startTIme = endCalendar.getTimeInMillis();
|
|
|
+
|
|
|
+ endCalendar.add(Calendar.DATE, 6); //得到本周的最后一天
|
|
|
+ String e_date = sdf.format(endCalendar.getTime());
|
|
|
+
|
|
|
+ //结束时间转换成时间戳
|
|
|
+ Long endTIme = endCalendar.getTimeInMillis();
|
|
|
+
|
|
|
+ //定义一个一天的时间戳时长
|
|
|
+ Long oneDay = 1000 * 60 * 60 * 24L;
|
|
|
+ Long time = startTIme;
|
|
|
+ //循环得出
|
|
|
+ while (time <= endTIme) {
|
|
|
+ list.add(new SimpleDateFormat("yyyy-MM-dd").format(new Date(time)));
|
|
|
+ time += oneDay;
|
|
|
+ }
|
|
|
+ endCalendar.add(Calendar.DATE, -j); //减去增加的日期
|
|
|
+ System.out.println("");
|
|
|
+ //只取两个日期之间的周
|
|
|
+ if(compareDate(firstWeekDay, s_date) && compareDate(s_date, lastWeekDay)
|
|
|
+ && compareDate(firstWeekDay, e_date) && compareDate(e_date, lastWeekDay)){
|
|
|
+ //超过选择的日期,按选择日期来算
|
|
|
+ if(!compareDate(sdf.format(startTime), s_date)){
|
|
|
+ s_date = sdf.format(startTime);
|
|
|
+ }
|
|
|
+ if(!compareDate(e_date, sdf.format(endTime))){
|
|
|
+ e_date = sdf.format(endTime);
|
|
|
+ }
|
|
|
+ Calendar yearCalendar = Calendar.getInstance();
|
|
|
+ Date sDate = sdf.parse(s_date);
|
|
|
+ yearCalendar.setTime(sDate);
|
|
|
+ int year = yearCalendar.get(Calendar.YEAR);
|
|
|
+ String s = year+ "年的第" + (endWeekOfYear - i) + "周" + "(" + s_date + "至" + e_date + ")";
|
|
|
+ System.out.println(s);
|
|
|
+ System.out.println("包含的日期 = " +list.toString());
|
|
|
+ Map<String,Object> map = new HashMap<String,Object>();
|
|
|
+ map.put("start", s_date);
|
|
|
+ map.put("end", e_date);
|
|
|
+ map.put("year", year);
|
|
|
+ map.put("week", endWeekOfYear - i);
|
|
|
+ map.put("dayList", list);
|
|
|
+ rtnList.add(map);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return rtnList;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 取得指定日期所在周的第一天
|
|
|
+ */
|
|
|
+ public static String getFirstDayOfWeek(Date date) {
|
|
|
+ try {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ Calendar c = new GregorianCalendar();
|
|
|
+ c.setFirstDayOfWeek(Calendar.MONDAY);
|
|
|
+ c.setTime(date);
|
|
|
+ c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); // Monday
|
|
|
+ return sdf.format(c.getTime());
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 取得指定日期所在周的最后一天
|
|
|
+ */
|
|
|
+ public static String getLastDayOfWeek(Date date) {
|
|
|
+ try {
|
|
|
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ Calendar c = new GregorianCalendar();
|
|
|
+ c.setFirstDayOfWeek(Calendar.MONDAY);
|
|
|
+ c.setTime(date);
|
|
|
+ c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); // Sunday
|
|
|
+ return sdf.format(c.getTime());
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * compareDate方法
|
|
|
+ * <p>方法说明:
|
|
|
+ * 比较endDate是否是晚于startDate;
|
|
|
+ * 如果是,返回true, 否则返回false
|
|
|
+ * </p>
|
|
|
+ */
|
|
|
+ public static boolean compareDate(String startDate, String endDate) {
|
|
|
+ try {
|
|
|
+ DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ java.util.Date date1 = dateFormat.parse(startDate);
|
|
|
+ java.util.Date date2 = dateFormat.parse(endDate);
|
|
|
+ if (date1.getTime() > date2.getTime())
|
|
|
+ return false;
|
|
|
+ return true; //startDate时间上早于endDate
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param cntDateBeg 开始时间
|
|
|
+ * @param cntDateEnd 结束时间
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public static List<String> addDates(String cntDateBeg, String cntDateEnd) {
|
|
|
+ List<String> list = new ArrayList<>();
|
|
|
+ //拆分成数组
|
|
|
+ String[] dateBegs = cntDateBeg.split("-");
|
|
|
+ String[] dateEnds = cntDateEnd.split("-");
|
|
|
+ //开始时间转换成时间戳
|
|
|
+ Calendar start = Calendar.getInstance();
|
|
|
+ start.set(Integer.valueOf(dateBegs[0]), Integer.valueOf(dateBegs[1]) - 1, Integer.valueOf(dateBegs[2]));
|
|
|
+ Long startTIme = start.getTimeInMillis();
|
|
|
+ //结束时间转换成时间戳
|
|
|
+ Calendar end = Calendar.getInstance();
|
|
|
+ end.set(Integer.valueOf(dateEnds[0]), Integer.valueOf(dateEnds[1]) - 1, Integer.valueOf(dateEnds[2]));
|
|
|
+ Long endTime = end.getTimeInMillis();
|
|
|
+ //定义一个一天的时间戳时长
|
|
|
+ Long oneDay = 1000 * 60 * 60 * 24L;
|
|
|
+ Long time = startTIme;
|
|
|
+ //循环得出
|
|
|
+ while (time <= endTime) {
|
|
|
+ list.add(new SimpleDateFormat("yyyy-MM-dd").format(new Date(time)));
|
|
|
+ time += oneDay;
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static void main(String[] args) throws Exception {
|
|
|
+// List<String> list = addDates("2022-02-01", "2022-03-31");
|
|
|
+// list.forEach(i ->
|
|
|
+// System.out.println(i)
|
|
|
+// );
|
|
|
+ DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ String start_time = "2022-02-02";
|
|
|
+ String end_time = "2022-04-11";
|
|
|
+ List<Map<String,Object>> lsit = getDateOfWeek(dateFormat.parse(start_time), dateFormat.parse(end_time));
|
|
|
+ System.out.println(JSON.toJSONString(lsit));
|
|
|
+
|
|
|
+ }
|
|
|
}
|