当我们在项目中遇到一些统计数据的查询时,如下:
查询最近七天数据统计
这种的图中相关日期数据一般情况下不好处理(在数据库中使用日期数据分组可能该日期无数据)时,我们可以将查询好的分组数据按照我们下面代码生成的格式进行关联,或者进行代码逻辑关联;这种办法可能是比较简单的一种(如有大佬也可直接数据库sql生成),此方法仅供参考:
/**
* 生成最近时间的list数组
* @param chronoUnit JDK时间枚举
* @param number 待生成的数组的个数,比如传值为 7 则 生成最新7 [chronoUnit]单位的日期字符串
* @param formatter 日期格式化 应该是"yyyy-MM-dd HH:mm:ss:SSS" 或其子串
* @return
*/
public static List<String> generateLastDateList(ChronoUnit chronoUnit, int number, String formatter){
List<LocalDateTime> localDateTimes = new ArrayList<>();
//formatter 应该是"yyyy-MM-dd HH:mm:ss:SSS" 或其子串
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(formatter);
LocalDateTime nowDateTime = LocalDateTime.now();
//此处本人仅做了天、年、月粒度的日期处理,当然还可以做不同的处理
switch (chronoUnit){
case DAYS:
for (int i = number-1; i > 0; i--) {
LocalDateTime localDateTime = nowDateTime.minusDays(i);
localDateTimes.add(localDateTime);
}
break;
case YEARS:
for (int i = number-1; i > 0; i--) {
LocalDateTime localDateTime = nowDateTime.minusYears(i);
localDateTimes.add(localDateTime);
}
break;
case MONTHS:
for (int i = number-1; i > 0; i--) {
LocalDateTime localDateTime = nowDateTime.minusMonths(i);
localDateTimes.add(localDateTime);
}
break;
}
localDateTimes.add(nowDateTime);
return localDateTimes.stream().map(localDateTime -> localDateTime.format(dtf)).collect(Collectors.toList());
}
测试例子如下:
public static void main(String[] args) {
System.out.println(generateLastDateList(
ChronoUnit.DAYS, //时间单位-->天
7, //生成的天数-->到今天最新7
"yyyy-MM-dd"
));
}
运行结果如下:
大家还有什么更好的实现方法欢迎留言交流~~