java 按月分组_java 给定一段时间 按周、月分组

需求

d03cf4f69ba0c32a63b0a867f52a6bd7.png

网上找了一下 大部分都是用Calendar做的  下方Calendar实现按月分组

需要引入包:

org.apache.commons

commons-lang3

3.7

类代码如下:

import java.util.ArrayList;

import java.util.Calendar;

import java.util.Date;

import java.util.List;

import org.apache.commons.lang3.time.DateUtils;

public class DateRange {

private Date start;

private Date end;

public DateRange() {

super();

}

public DateRange(Date start, Date end) {

super();

this.start = start;

this.end = end;

}

/**

* 判断时间范围是否不为空,即开始时间不在结束时间之后

*/

public boolean isNotEmptyDateRange() {

return start.before(end) || start.equals(end);

}

public ListsplitByMonth() {

Listresult = new ArrayList<>();

if(!this.isNotEmptyDateRange()) {

return result;

}

Calendar sc = Calendar.getInstance();

sc.setTime(start);

Calendar ec = Calendar.getInstance();

ec.setTime(end);

if (this.isSameMonth(sc, ec)) {

result.add(this);

return result;

}

while(sc.before(ec)) {

DateRange d = new DateRange();

d.setStart(sc.getTime());

//向时间点之后取整,这里以月取整,就是下月初第一天零点

//还有一个方法是truncate是向之前的时间取整,和celling正好相反

//为什么celling有向后取整的意思,因为吊灯,天花板,之类的英文就是celling

sc = DateUtils.ceiling(sc, Calendar.MONTH);

//这里主要考虑最后一个月的情况,这个if其实可以提到while外面,性能会更好一点

//我懒得提了

if(sc.before(ec)) {

d.setEnd(sc.getTime());

} else {<

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值