获取当前日期之前或者两日期之间的日期

直接上代码 (看的不是很懂的,先执行一遍吧,注:需要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;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值