1. 程式人生 > >java統計指定年月下的每一天,並排序

java統計指定年月下的每一天,並排序

需求:從資料庫查出List<Map<String,Object>>格式的資料。

比如:[{num=1, tm=05-04}, {num=1, tm=05-06},{num=1, tm=05-03}]

但是,需求是要查出指定的年月的所有天數,之前想從sql入手,無奈失敗,從java入手

拼資料。

	public static void main(String[] args) throws ParseException {
		List<Map<String, Object>> list=new ArrayList<>();
		Map<String,Object> mp1=new HashMap<>();
		Map<String,Object> mp2=new HashMap<>();
		Map<String,Object> mp3=new HashMap<>();
		mp1.put("num", 10);
		mp1.put("tm", "02-10");
		mp2.put("num", 10);
		mp2.put("tm", "02-18");
		mp3.put("num", 10);
		mp3.put("tm", "02-01");
		list.add(mp1);
		list.add(mp2);
		list.add(mp3);
		getData(2018,2,list);
		
	}
	/**
	 * 構造整個月的資料,資料庫查不到預設為零,只要傳入年和月以及資料就可以返回按升序排好的整個月的資料
	 *2018年5月30日
	 *smy
	 *@param year 指定年
	 *@param m 指定月
	 *@param mp 資料庫得到的資料
	 *@return 
	 */
	public static List<Map<String, Object>> getData(int year, int month, List<Map<String, Object>> mp) {
		ArrayList<String> dayList = dayList( year,  month);//指定月日期集合
		if(mp.size()< getDaysByYearMonth(year,month)){
			for(Map m:mp){
				dayList.remove(m.get("tm"));//移除和mp(傳入的引數)中重複的資料,剩下的就是不同的記錄。
			}
		}
		for(String str:dayList){//把兩個集合融為一體
			HashMap<String, Object> tempMap = new HashMap<>();
			tempMap.put("num", "0");
			tempMap.put("tm", str);
			mp.add(tempMap);
			tempMap=null;
		}
		return listSort(mp);//把融為一體的集合排序得到最終結果
		 
	}
	/**
	 * 獲取指定年月的天數集合[05-01,05-02,05-03,05-04......]
	 *2018年5月30日
	 *smy 
	 *@param year
	 *@param month
	 *@return List集合的月日集合[05-01,05-02,05-03,05-04......]
	 */
	private static ArrayList<String> dayList(int year, int month) {
        Calendar cal = Calendar.getInstance(); 
		cal.set(Calendar.YEAR, year);//設定年份,不設定年2月會有問題
        cal.set(Calendar.MONTH, month-1);//設定月份
        cal.set(Calendar.DAY_OF_MONTH, 1);// 從一號開始  
        ArrayList<String> arrayList = new ArrayList<>();
        for (int i = 0; i < getDaysByYearMonth(year, month); i++, cal.add(Calendar.DATE, 1)) {  
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");  
            String df = simpleDateFormat.format(cal.getTime()); 
            String substring="";
            if(df!=null){
            	substring = df.substring(5, 10);//擷取月日比如05-03
            }
            arrayList.add(substring);
       }  
       
        return arrayList;//返回指定月的天數集合
    
	}
	/**
	 * 獲取year年的month月的天數
	 *2018年5月30日
	 *smy 
	 *@param year 年份
	 *@param month 月份
	 *@return int型別的天數總數30
	 */
	private static int getDaysByYearMonth(int year, int month) {

        Calendar a = Calendar.getInstance();  
        a.set(Calendar.YEAR, year);  //設定年
        a.set(Calendar.MONTH, month - 1);  //設定月
        a.set(Calendar.DATE, 1);  //設定天
        a.roll(Calendar.DATE, -1);  
        int maxDate = a.get(Calendar.DATE);  
     
        return maxDate;  //總天數
    
	}
	/**
	 * 對List<Map<String, Object>>資料集進行升序排序
	 *2018年5月30日
	 *smy 
	 *@param resultList 
	 *@return 返回List<Map<String, Object>>資料集
	 */
	public static List<Map<String, Object>> listSort(List<Map<String, Object>> resultList) {

		// resultList是需要排序的list,其內放的是Map
		// 返回的結果集
		Collections.sort(resultList, new Comparator<Map<String, Object>>() {

			public int compare(Map<String, Object> o1, Map<String, Object> o2) {

				// o1,o2是list中的Map,可以在其內取得值,按其排序,此例為升序,s1和s2是排序欄位值
				Integer s1 = Integer.valueOf(((String) o1.get("tm")).replace("-", "")) ;
				Integer s2 = Integer.valueOf(((String) o2.get("tm")).replace("-", "")) ;

				if (s1 > s2) {
					return 1;
				} else {
					return -1;
				}
			}
		});
		System.out.println(resultList);
		return resultList;//返回排序的結果
	}
	
	
	//執行結果如下
	
	
	[{num=10, tm=02-01}, {num=0, tm=02-02}, {num=0, tm=02-03}, {num=0, tm=02-04}, {num=0, tm=02-05}, {num=0, tm=02-06}, 
	{num=0, tm=02-07}, {num=0, tm=02-08}, {num=0, tm=02-09}, {num=10, tm=02-10}, {num=0, tm=02-11}, {num=0, tm=02-12},
	{num=0, tm=02-13}, {num=0, tm=02-14}, {num=0, tm=02-15}, {num=0, tm=02-16}, {num=0, tm=02-17}, {num=10, tm=02-18}, 
	{num=0, tm=02-19}, {num=0, tm=02-20}, {num=0, tm=02-21}, {num=0, tm=02-22}, {num=0, tm=02-23}, {num=0, tm=02-24}, 
	{num=0, tm=02-25}, {num=0, tm=02-26}, {num=0, tm=02-27}, {num=0, tm=02-28}]

相關推薦

java統計指定年月排序

需求:從資料庫查出List<Map<String,Object>>格式的資料。比如:[{num=1, tm=05-04}, {num=1, tm=05-06},{num=1, tm=05-03}]但是,需求是要查出指定的年月的所有天數,之前想從sql入

python獲取指定日期範圍內的每個月季度

1.獲取所有天,返回一個列表: def getBetweenDay(begin_date): date_list = [] begin_date = datetime.datetim

如何使用oracle資料庫查詢指定時間內的日期

oracle查詢語句(查詢在2018-02-01至2018-07-31時間段內的每一天日期)SELECT TO_CHAR(TO_DATE('2018-02-01', 'yyyy-MM-dd') + ROWNUM - 1,'yyyy-MM-dd') as daylistFRO

MySql 求段時間範圍內的小時分鐘

pda join 月份 nbsp 獲取 pan 關聯 orm now() 平常經常會求一段時間內的每一天統計數據,或者每一時點的統計數據。但是mysql本身是沒有直接獲取時點列表的函數或表。下面是自己用到的一些方法,利用臨時變量和一個已存在的比較多數據(這個需要根據實際情況

日誌必須開始寫了記錄自己希望每天進步一點

自己的每一天都是無法再重新返回過的,當前的每一分一秒都應該有所痕跡。必須有所行動,治癒焦慮吧。一直想要開始寫的部落格就從今天開始吧,如果不做點什麼,你將永遠失去今天。今天繼續寫自己的APP專案,發現程式碼被我改亂了,沒辦法退回到昨天的程式碼了,想到git,必須得用了。之前已經

獲取視訊的儲存為.jpg圖片

#include<opencv2\opencv.hpp> #include <iostream> #include <stdio.h> #include<fstream> using namespace std; using names

java根據年月獲取當前月的日期

public static List<String> getDayByMonth(int yearParam,int monthParam){         List list = new ArrayList();         Calendar aCalen

JAVA 日期 一個時間段總共幾周星期幾

static art system 指定 保留 當前時間 throws gre 測試 /** * 查詢一個時間段的總周數和查詢當前時間是第幾周 * @param start * @param end * @return *

js 獲取指定日期上上一月及一月

1、獲取指定日期上一天、下一天 function getNextDate(date,day) { var dd = new Date(date); dd.setDate(dd.getDate() + day); var y = dd.getFullYear(); var m

【老紫竹的專欄】享受Java的快樂之我的大資料生活

專欄達人 授予成功建立個人部落格專欄

mysql 獲取某個時間段一個小時的統計資料

轉載:https://blog.csdn.net/Crystalqy/article/details/79443155  獲取每一天的統計資料 做專案的時候需要統對專案日誌做分析,其中有一個需求是獲取某個給定的時間段內,每一天的日誌資料,比如說要獲取從2018-02-02

老紫竹的專欄(享受Java的快樂之我的大資料生活)

跟老紫竹學Java 考慮再三,自己最熟悉的還是這麼多年使用Java在伺服器端和Web方面的程式設計經驗了。決定重新整理自己這麼多年的經驗,看看到底自己都會啥?考慮到實際情況,將採用虛擬專案的形式,根據專案的大小,從專案的分析設計到

java獲取段日期中的

  Calendar c_begin = new GregorianCalendar();     Calendar c_end = new GregorianCalendar();     DateFormatSymbols dfs = new DateFormatSymb

mysql 獲取規定時間段內統計資料

按年統計 SELECT count(*), DATE_FORMAT(order_info.create_time, '%Y-%m-%d') AS count_by_date

統計的使用者註冊數sql語句

 SELECT count(*), DATE_FORMAT(FROM_UNIXTIME(ctime),'%m-%d') as time FROM zj_admin  WHERE ctime BETWEEN  unix_timestamp('2014-3-1')  AND (unix_timestamp('20

Python2 獲取兩日期之間的

日期 ftime 不定 獲取 class clas get pri eve import datetime def getEveryDay(begin_date,end_date): date_list = [] begin_date = datetime

計劃好工作的

計劃一、工作學習的健康規劃。 1、每天至少2杯水,上午1杯,下午2杯。(如果加班也要加上1杯) 2、每工作學習一小時,放松下眼睛,走動下身體。 3、每天下班後至少保持定量的運動(0.5h)。 4、按時吃飯,保證充足的營養。 5、按時睡覺,保證充足的睡眠。二、有限時間,高效學習。

js獲取本月或指定月份的最後

undefine day nth true || defined turn 獲取 null 自定義方法,用於獲取本月或指定月份的最後一天,如果不傳參數,就是當前月: function getMonthFinalDay(year,month){ var day=‘‘;

java操作時間將當前時間減減一個月

strong note 計算 mon 項目 class comm settime cli 在Java中操作時間的時候,常常遇到求一段時間內的某些值,或者計算一段時間之間的天數 [java] view plain copy Date date =

java讀取指定package的所有class

public als sta 功能 accept smo bstr 文件的 get JAVA如何掃描一個包下面的所有類,並加載到內存中去? spring中有一個<context:component-scan base-package="com.controller"