时间:2023-07-31人气:作者:未知
本头条号主要是Java常用关键技术点,通用工具类的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技术分享;datax、kafka、flink等大数据处理框架的技术分享。文章会不断更新,欢迎码友关注点赞收藏转发!
关注多的话,后面会录制一些视频教程,图文和视频结合,比如:图书介绍网站系统、抢购系统、大数据中台系统等。技术才是程序猿的最爱,码友们冲啊
正文
在java开发中,几乎所有系统都有报表统计的功能,而报表统计的其中一个参数就是时间段,有环比同比时间段统计,有时间段统计,有周统计,有趋势图统计等,所以封装了该工具类,避免在每个统计方法中重复的计算这样那样的日期。
照旧先上工具类使用栗子:
System.out.println("201909环比日期="+ReportDateUtil.getHbMonth("201909")); System.out.println("201909同比日期="+ReportDateUtil.getTbMonth("201909")); System.out.println("201901-201909相隔月数="+ReportDateUtil.getPeriodAmount("20190101", "20190901", ReportDateUtil.MONTH)); // 用于趋势图中显示日期,当统计值为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环比日期=201908 201909同比日期=201809 201901-201909相隔月数=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]
下面给出完整的工具类,这是我项目中在报表统计时经常用到的,有需要的码友可以先收藏,说不定哪天就用到了。
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环比日期="+ReportDateUtil.getHbMonth("201909")); System.out.println("201909同比日期="+ReportDateUtil.getTbMonth("201909")); System.out.println("201901-201909相隔月数="+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 当前日期字符串,格式yyyyMM * @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 当前日期字符串,格式yyyyMM * @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 当前日期字符串,格式yyyy * @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 当前日期字符串,格式yyyy * @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())); } /** * 计算环比月 * * @param currMonth 当前日期字符串,格式yyyyMM * @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 当前日期字符串,格式yyyyMM * @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 结束的日期 yyyyMMdd * @param unit 年(或月或日)的标识,默认日 * @return */ public static List
大部分系统都是有图表统计的,有图表统计的话基本都能使用到这个工具类。这也是我在多个项目中都用到,所以封装了这个工具类。
以上就是本站»报表统计怎么做(月报表的统计制作方法)的相关内容了,更多精彩请关注作者:万年知识
声明:本文由本站【创业者资源平台】作者编辑发布,更多技术关注万年技术!
随着互联网的普及,生活中方方面面都离不开网络,手机低头党更是屡见不鲜。毫不夸张地说“给我一个wifi,我可以宅到世界末日”。路由器为家庭的互联网网络生活提供了最有利的保证和最坚强的后盾,今天的主角是是
(0)人喜欢2023-07-31你是否还在为喜欢的视频因为格式不对不能打开而烦恼呢?来试试iSkysoft Video Converter Ultimate for Mac吧!iSkysoft Video Converter Ult
(0)人喜欢2023-07-315款精心挑选的实用型手机APP,都是手机上大浪淘沙的保留下来的,或许会成为你们相见恨晚的宝藏APP呢达目标用过了大部分效率软件,总是三天打鱼两天晒网,都比不上达目标的强制打卡。懒癌患者的福音,只需三步
(0)人喜欢2023-07-31为了方便企业部署和维护系统,微软推出了 Windows PE 系统,只保留了系统内核和基础功能,为了让这个 PE 系统更强大,更适合装机维护工具,网上出现了各种各样的 PE 系统,但是大多数 PE 系
(0)人喜欢2023-07-31本头条号主要是Java常用关键技术点,通用工具类的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+doc
(0)人喜欢2023-07-31随着互联网的普及,生活中方方面面都离不开网络,手机低头党更是屡见不鲜。毫不夸张地说“给我一个wifi,我可以宅到世界末日”。路由器为家庭的互联网网络生活提供了最有利的保证和最坚强的后盾,今天的主角是是
(0)人喜欢2023-07-31醉酒驾驶机动车辆,吊销驾照,5年内不得重新获取驾照,经过判决后处以拘役,并处罚金;醉酒驾驶营运机动车辆,吊销驾照,10年内不得重新获取驾照,终
(0)人喜欢2023-07-31你是否还在为喜欢的视频因为格式不对不能打开而烦恼呢?来试试iSkysoft Video Converter Ultimate for Mac吧!iSkysoft Video Converter Ult
(0)人喜欢2023-07-31