Ver código fonte

首页数据统计日期工具类处理

Liugl 3 anos atrás
pai
commit
534f92b48f

+ 208 - 0
mp-common/src/main/java/com/qs/mp/common/utils/DateUtils.java

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