Java将时间按月份分段的实现思路与方法

网友投稿 464 2022-10-13


Java将时间按月份分段的实现思路与方法

前言

有时候我们得到一段时间,需要将时间按照月份将这一段时间来分段。比如开始时间为 2020/07/15 至 2021/07/05 按照月份来将数据分组展示,所以需要将这端时间分为以下几段:

2020/07/15 ~ 2020/08/01

2020/08/01 ~ 2020/09/01

2020/09/01 ~ 2020/10/01

...

2021/06/01 ~ 2021/07/01

2021/07/01 ~ 2021/07/05

一、知识点

将时间分类主要是用到了java中的 Calendar,像一般需要对时间进行处理的时候都是需要用到这个类的。可以使用 Calendar 这个类设置或获取日历中的时间,一些常用的API如下所示:

初始化Calendar对象

Calendar calendar = Calendar.getInstance();

设置日历的时间

Date time = new Date;

calendar.setTime(time);

获取日历中的时间(年月日)

calendar.set(Calendar.YEAR, 2021); // 年

calendar.add(Calendar.MONTH, 1); // 月

calendar.set(Calendar.DAY_OF_MONTH, 1); // 日

二、思路分析

大概的实现思路就是:从开始时间开始,以累加的方式逐月增加,直到当前时YEYBZsAhKW间大于结束时间则停止叠加。

要注意的是,即使当前时间大于结束时间也需要把结束时间添加到结果集中。因为最后一个时间段是从月初到结束日期的。

三、实现方案

实现的方式就和思路中是一样的,一些注释都写在代码中了YEYBZsAhKW,如下图所示:

/**

* 按照月份分割一段时间

*

* @param startTime 开始时间戳(毫秒)

* @param endTime 结束时间戳(毫秒)

*/

public static List getIntervalTimeByMonth(Date startTime, Date endTime) {

List dateList = new ArrayList<>();

Calendar calendar = Calendar.getInstance();

calendar.setTime(startTime);

dateList.add(calendar.getTimeInMillis());

while (calendar.getTimeInMillis() < endTime.getTime()) {

// 当月底

calendar.add(Calendar.MONTH, 1);

calendar.set(Calendar.DAY_OF_MONTH, 1);

calendar.add(Calendar.DATE, -1);

calendar.set(Calendar.HOUR_OF_DAY, 23);

calendar.set(Calendar.MINUTE, 59);

calendar.set(Calendar.SECOND, 59);

if(calendar.getTimeInMillis() >= endTime.getTime()){

dateList.add(endTime.getTime());

break;

}

// 下月初

calendar.add(Calendar.DATE, 1);

calendar.set(Calendar.HOUR_OF_DAY, 0);

calendar.set(Calendar.MINUTE, 0);

calendar.set(Calendar.SECOND, 0);

dateList.add(calendar.getTimeInMillis());

}

return dateList;

}

测试的代码如下所示:

public static void main(String[] args) throws ParseException {

SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Date beginDate = sdf.parse("2020-07-15");

Date endDate = sdf.parse("2021-07-05");

List endDateList = DateUtil.getIntervalTimeByMonth(beginDate, endDate);

for (int i = 0; i < endDateList.size(); i++) {

Long beginStr = endDateList.get(i);

String begin1 = sdf1.format(new Date(beginStr));

System.out.println("第" + i + "段时间区间:" + begin1);

}

}

测试的结果如下所示:

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:融云通信周边能力上新啦!一键 Get 美颜、CDN 服务
下一篇:RENIX 软件连接机箱测试 RTSM 基本操作——网络测试仪实操(热秘型便秘中药方剂)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~