直接上代码 (看的不是很懂的,先执行一遍吧,注:需要jdk1.8及以上)
public static void main(String[] args) {
// 参数start、end为空就是获取当前时间前的日期
// 参数type为1时,获取的是yyyy-MM-dd的日期,为2时获取的是yyyy-MM的日期
Map<String, Object> map = init("1", null, null);
for (String key : map.keySet()) {
System.out.println(key+"============"+map.get(key));
}
}
private static Map<String,Object> init(String type, LocalDate start, LocalDate end) {
Map<String,Object> result = new LinkedHashMap<>();
end = Objects.nonNull(end) ? end : LocalDate.now();
switch (type) {
case "1":
//这里的29最终会获取包括今天,以及之前的30天的日期
//同理要想获取7天的日期 填6即可
start = Objects.nonNull(start) ? start : end.minusDays(29);
result = buildInit(start, end, e -> e.plusDays(1), "yyyy-MM-dd");
break;
case "2":
//这里的11一样,会获取包括这个月,以及之前的12个月的日期
//同理要想获取到现在往前推7天的日期 填6即可
start = Objects.nonNull(start) ? start : end.minusMonths(11);
result = buildInit(start, end, e -> e.plusMonths(1), "yyyy-MM");
break;
//要是有其他业务,年、小时什么的同上即可
//例:plusYear() plusHours()
default:
break;
}
return result;
}
private static Map<String,Object> buildInit(LocalDate start, LocalDate end, Function<LocalDate, LocalDate> function, String pattern) {
Map<String,Object> result = new LinkedHashMap<>();
for (LocalDate s = start; s.isBefore(end) || s.equals(end); s = function.apply(s)) {
String format = s.format(DateTimeFormatter.ofPattern(pattern));
result.put(format,0);
}
return result;
}