国产chinesehd精品酒店,邱淑贞aa极毛片,国产在线色视频,玖玖爱zh综合伊人久久

報表統(tǒng)計怎么做(自己做一個入庫出庫系統(tǒng))

更新時間:2023-07-31 09:04:55作者:未知

報表統(tǒng)計怎么做(自己做一個入庫出庫系統(tǒng))

本頭條號主要是Java常用關(guān)鍵技術(shù)點,通用工具類的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技術(shù)分享;datax、kafka、flink等大數(shù)據(jù)處理框架的技術(shù)分享。文章會不斷更新,歡迎碼友關(guān)注點贊收藏轉(zhuǎn)發(fā)!

關(guān)注多的話,后面會錄制一些視頻教程,圖文和視頻結(jié)合,比如:圖書介紹網(wǎng)站系統(tǒng)、搶購系統(tǒng)、大數(shù)據(jù)中臺系統(tǒng)等。技術(shù)才是程序猿的最愛,碼友們沖啊

正文

在java開發(fā)中,幾乎所有系統(tǒng)都有報表統(tǒng)計的功能,而報表統(tǒng)計的其中一個參數(shù)就是時間段,有環(huán)比同比時間段統(tǒng)計,有時間段統(tǒng)計,有周統(tǒng)計,有趨勢圖統(tǒng)計等,所以封裝了該工具類,避免在每個統(tǒng)計方法中重復(fù)的計算這樣那樣的日期。

照舊先上工具類使用栗子:

System.out.println("201909環(huán)比日期="+ReportDateUtil.getHbMonth("201909")); System.out.println("201909同比日期="+ReportDateUtil.getTbMonth("201909")); System.out.println("201901-201909相隔月數(shù)="+ReportDateUtil.getPeriodAmount("20190101", "20190901", ReportDateUtil.MONTH)); // 用于趨勢圖中顯示日期,當統(tǒng)計值為0時也是要顯示的哦 System.out.println("201901-201909之間的日期列表="+ReportDateUtil.getPeriodDateList("20190101", "20190901", ReportDateUtil.MONTH)); ReportDateUtil.getMonthWeekGroupList("201909").forEach((k, v) -> { // 計算9月份共有多少周,每周的日期 System.out.println("201909第"+k+"周:"+v.toString()); }); System.out.println("201909中的自然周為="+ReportDateUtil.getMonthWeekList("201909"));

上面使用例子打印如下

201909環(huán)比日期=201908 201909同比日期=201809 201901-201909相隔月數(shù)=8 201901-201909之間的日期列表=[201901, 201902, 201903, 201904, 201905, 201906, 201907, 201908, 201909] 201909第1周:[2019-09-01, 2019-09-02, 2019-09-03, 2019-09-04, 2019-09-05, 2019-09-06, 2019-09-07] 201909第2周:[2019-09-08, 2019-09-09, 2019-09-10, 2019-09-11, 2019-09-12, 2019-09-13, 2019-09-14] 201909第3周:[2019-09-15, 2019-09-16, 2019-09-17, 2019-09-18, 2019-09-19, 2019-09-20, 2019-09-21] 201909第4周:[2019-09-22, 2019-09-23, 2019-09-24, 2019-09-25, 2019-09-26, 2019-09-27, 2019-09-28] 201909第5周:[2019-09-29, 2019-09-30] 201909中的自然周為=[201939, 201936, 201938, 201937, 201940]

下面給出完整的工具類,這是我項目中在報表統(tǒng)計時經(jīng)常用到的,有需要的碼友可以先收藏,說不定哪天就用到了。

import java.time.DayOfWeek; import java.time.LocalDate; import java.time.Period; import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; import java.time.temporal.WeekFields; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; /** * 報表日期工具類 * * @author liang - liangxn * @date 2019/9/19 10:17 */ public class ReportDateUtil { private static final DateTimeFormatter DTF_YYYYMMDD = DateTimeFormatter.ofPattern("yyyyMMdd"); private static final DateTimeFormatter DTF_YYYYMM = DateTimeFormatter.ofPattern("yyyyMM"); private static final DateTimeFormatter DTF_YYYY = DateTimeFormatter.ofPattern("yyyy"); private static final String PATTERN_WEEK = "yyyyw"; public static final int YEAR = 1; public static final int MONTH = 2; public static final int DAY = 3; public static void main(String[] args) { System.out.println("201909環(huán)比日期="+ReportDateUtil.getHbMonth("201909")); System.out.println("201909同比日期="+ReportDateUtil.getTbMonth("201909")); System.out.println("201901-201909相隔月數(shù)="+ReportDateUtil.getPeriodAmount("20190101", "20190901", ReportDateUtil.MONTH)); System.out.println("201901-201909之間的日期列表="+ReportDateUtil.getPeriodDateList("20190101", "20190901", ReportDateUtil.MONTH)); ReportDateUtil.getMonthWeekGroupList("201909").forEach((k, v) -> { System.out.println("201909第"+k+"周:"+v.toString()); }); System.out.println("201909中的自然周為="+ReportDateUtil.getMonthWeekList("201909")); } /** * 獲取月的第一天 * * @param currMonth 當前日期字符串,格式y(tǒng)yyyMM * @return */ public static String getFirstOfMonth(String currMonth) { currMonth = currMonth + "01"; LocalDate d = LocalDate.parse(currMonth, DTF_YYYYMMDD); return DTF_YYYYMMDD.format(d.with(TemporalAdjusters.firstDayOfMonth())); } /** * 獲取月的最后一天 * * @param currMonth 當前日期字符串,格式y(tǒng)yyyMM * @return */ public static String getLastOfMonth(String currMonth) { currMonth = currMonth + "01"; LocalDate d = LocalDate.parse(currMonth, DTF_YYYYMMDD); return DTF_YYYYMMDD.format(d.with(TemporalAdjusters.lastDayOfMonth())); } /** * 獲取年的第一天 * * @param currYear 當前日期字符串,格式y(tǒng)yyy * @return */ public static String getFirstOfYear(String currYear) { currYear = currYear + "0101"; LocalDate d = LocalDate.parse(currYear, DTF_YYYYMMDD); return DTF_YYYYMMDD.format(d.with(TemporalAdjusters.firstDayOfYear())); } /** * 獲取年的最后一天 * * @param currYear 當前日期字符串,格式y(tǒng)yyy * @return */ public static String getLastOfYear(String currYear) { currYear = currYear + "0101"; LocalDate d = LocalDate.parse(currYear, DTF_YYYYMMDD); return DTF_YYYYMMDD.format(d.with(TemporalAdjusters.lastDayOfYear())); } /** * 計算環(huán)比月 * * @param currMonth 當前日期字符串,格式y(tǒng)yyyMM * @return */ public static String getHbMonth(String currMonth) { currMonth = currMonth + "01"; LocalDate d = LocalDate.parse(currMonth, DTF_YYYYMMDD); return DTF_YYYYMM.format(d.minusMonths(1L)); } /** * 計算同比月 * * @param currMonth 當前日期字符串,格式y(tǒng)yyyMM * @return */ public static String getTbMonth(String currMonth) { currMonth = currMonth + "01"; LocalDate d = LocalDate.parse(currMonth, DTF_YYYYMMDD); return DTF_YYYYMM.format(d.minusYears(1L)); } /** * 計算兩個日期之間的年(或月或日)的集合 * * @param startDate 開始的日期 yyyyMMdd * @param endDate 結(jié)束的日期 yyyyMMdd * @param unit 年(或月或日)的標識,默認日 * @return */ public static List getPeriodDateList(String startDate, String endDate, int unit) { List l = new ArrayList<>(); LocalDate start = LocalDate.parse(startDate, DTF_YYYYMMDD); LocalDate end = LocalDate.parse(endDate, DTF_YYYYMMDD); Period p = Period.between(start, end); if (ReportDateUtil.YEAR == unit) { for (int i = 0; i <= p.getYears(); i++) { l.add(DTF_YYYY.format(start.plusYears(i))); } } else if (ReportDateUtil.MONTH == unit) { for (int i = 0; i <= p.getMonths(); i++) { l.add(DTF_YYYYMM.format(start.plusMonths(i))); } } else if (ReportDateUtil.DAY == unit) { for (int i = 0; i <= p.getDays(); i++) { l.add(DTF_YYYYMMDD.format(start.plusDays(i))); } } return l; } /** * 計算兩個日期之間的年(或月或日)的集合 * * @param startDate 開始的日期 yyyyMMdd * @param endDate 結(jié)束的日期 yyyyMMdd * @param unit 年(或月或日)的標識,默認日 * @return */ public static List getPeriodDateList(String startDate, String endDate, int unit, String pattern) { DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern); List l = new ArrayList<>(); LocalDate start = LocalDate.parse(startDate, DTF_YYYYMMDD); LocalDate end = LocalDate.parse(endDate, DTF_YYYYMMDD); Period p = Period.between(start, end); if (ReportDateUtil.YEAR == unit) { for (int i = 0; i <= p.getYears(); i++) { l.add(dtf.format(start.plusYears(i))); } } else if (ReportDateUtil.MONTH == unit) { for (int i = 0; i <= p.getMonths(); i++) { l.add(dtf.format(start.plusMonths(i))); } } else if (ReportDateUtil.DAY == unit) { for (int i = 0; i <= p.getDays(); i++) { l.add(dtf.format(start.plusDays(i))); } } return l; } /** * 計算某個月的的每一周在一年中屬于第幾周的集合,如2019年9月有6周(周一為一周開始),則返回結(jié)果為:[201934,201935,201936,201937,201938,201939] * * @param currMonth 年月字符串 yyyyMM * @return */ public static List getMonthWeekList(String currMonth) { return getMonthWeekList(currMonth, PATTERN_WEEK); } /** * 計算某個月的的每一周在一年中屬于第幾周的集合,如2019年9月有6周(周一為一周開始),則返回結(jié)果為:[201934,201935,201936,201937,201938,201939] * * @param currMonth 年月字符串 yyyyMM * @return */ public static List getMonthWeekList(String currMonth, String pattern) { final DateTimeFormatter DTF_WEEK = DateTimeFormatter.ofPattern(pattern); YearMonth yearMonth = YearMonth.parse(currMonth, DTF_YYYYMM); LocalDate start = LocalDate.now().with(yearMonth).with(TemporalAdjusters.firstDayOfMonth()); LocalDate end = LocalDate.now().with(yearMonth).with(TemporalAdjusters.lastDayOfMonth()); if(end.isAfter(LocalDate.now())){ end = LocalDate.now(); } // 按周分組,設(shè)置一周的開始日期為 星期天 Map> collect = Stream.iterate(start, localDate -> localDate.plusDays(1L)) .limit(ChronoUnit.DAYS.between(start, end) + 1) .collect(Collectors.groupingBy(localDate -> DTF_WEEK.format(localDate))); List l = new ArrayList<>(); collect.forEach((k, v) -> l.add(k)); return l; } /** * 計算某個月的自然周數(shù)的集合,按周分組,并列出每周的天日期,例如201909月有5周,每周的日期如下: * 第1周:[2019-09-01, 2019-09-02, 2019-09-03, 2019-09-04, 2019-09-05, 2019-09-06, 2019-09-07] * 第2周:[2019-09-08, 2019-09-09, 2019-09-10, 2019-09-11, 2019-09-12, 2019-09-13, 2019-09-14] * 第3周:[2019-09-15, 2019-09-16, 2019-09-17, 2019-09-18, 2019-09-19, 2019-09-20, 2019-09-21] * 第4周:[2019-09-22, 2019-09-23, 2019-09-24, 2019-09-25, 2019-09-26, 2019-09-27, 2019-09-28] * 第5周:[2019-09-29, 2019-09-30] * * @param currMonth 年月字符串 yyyyMM * @return */ public static Map> getMonthWeekGroupList(String currMonth) { YearMonth yearMonth = YearMonth.parse(currMonth, DTF_YYYYMM); LocalDate start = LocalDate.now().with(yearMonth).with(TemporalAdjusters.firstDayOfMonth()); LocalDate end = LocalDate.now().with(yearMonth).with(TemporalAdjusters.lastDayOfMonth()); // 按周分組,設(shè)置一周的開始日期為 星期天 return Stream.iterate(start, localDate -> localDate.plusDays(1L)) .limit(ChronoUnit.DAYS.between(start, end) + 1) .collect(Collectors.groupingBy(localDate -> localDate.get(WeekFields.of(DayOfWeek.SUNDAY, 1).weekOfMonth()))); } /** * 計算兩個日期相隔多少年(或月或日) * * @param startDate 開始的日期 yyyyMMdd * @param endDate 結(jié)束的日期 yyyyMMdd * @param unit 計算年(或月或日)的標識,默認日 * @return */ public static int getPeriodAmount(String startDate, String endDate, int unit) { LocalDate start = LocalDate.parse(startDate, DTF_YYYYMMDD); LocalDate end = LocalDate.parse(endDate, DTF_YYYYMMDD); Period p = Period.between(start, end); if (ReportDateUtil.YEAR == unit) { return p.getYears(); } else if (ReportDateUtil.MONTH == unit) { return p.getMonths(); } return p.getDays(); } }

大部分系統(tǒng)都是有圖表統(tǒng)計的,有圖表統(tǒng)計的話基本都能使用到這個工具類。這也是我在多個項目中都用到,所以封裝了這個工具類。

以上就是本站?報表統(tǒng)計怎么做(月報表的統(tǒng)計制作方法)的相關(guān)內(nèi)容了,更多精彩請關(guān)注作者:萬年知識

聲明:本文由本站【創(chuàng)業(yè)者資源平臺】作者編輯發(fā)布,更多技術(shù)關(guān)注萬年技術(shù)!

本文標簽: [db:關(guān)鍵詞]  

為您推薦

報表統(tǒng)計怎么做(自己做一個入庫出庫系統(tǒng))

本頭條號主要是Java常用關(guān)鍵技術(shù)點,通用工具類的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+doc

2023-07-31 09:04

華為路由器助手 華為路由器助手app

隨著互聯(lián)網(wǎng)的普及,生活中方方面面都離不開網(wǎng)絡(luò),手機低頭黨更是屢見不鮮。毫不夸張地說“給我一個wifi,我可以宅到世界末日”。路由器為家庭的互聯(lián)網(wǎng)網(wǎng)絡(luò)生活提供了最有利的保證和最堅強的后盾,今天的主角是是

2023-07-31 09:04

萬能軟件修改器(可以修改任何游戲的修改器)

人生沒的選擇,但是游戲可以!隨著Steam從當年的小眾平臺,逐漸晉升到現(xiàn)在的全球最大游戲數(shù)字平臺,越來越多的人接觸到了單機游戲,相信每一名游戲熱愛者,除了最開始接觸游戲時的激情與快樂都會在第一次卡在某

2023-07-31 09:04

涂鴉軟件哪個好(涂鴉軟件哪個好用又便宜)

5款精心挑選的實用型手機APP,都是手機上大浪淘沙的保留下來的,或許會成為你們相見恨晚的寶藏APP呢達目標用過了大部分效率軟件,總是三天打魚兩天曬網(wǎng),都比不上達目標的強制打卡。懶癌患者的福音,只需三步

2023-07-31 09:02

winpe工具箱怎么用(winpe 工具)

為了方便企業(yè)部署和維護系統(tǒng),微軟推出了 Windows PE 系統(tǒng),只保留了系統(tǒng)內(nèi)核和基礎(chǔ)功能,為了讓這個 PE 系統(tǒng)更強大,更適合裝機維護工具,網(wǎng)上出現(xiàn)了各種各樣的 PE 系統(tǒng),但是大多數(shù) PE 系

2023-07-31 09:02

2023央視315晚會直播在哪看(315央視晚會直播時間)

中央廣播電視總臺2023年3·15晚會將于3月15日20點在央視財經(jīng)頻道現(xiàn)場直播,并在央視財經(jīng)新媒體、央視頻客戶端和央廣經(jīng)濟之聲同步直播。

2023-07-31 08:28