本篇内容介绍了“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); // 日
大概的实现思路就是:从开始时间开始,以累加的方式逐月增加,直到当前时间大于结束时间则停止叠加。
要注意的是,即使当前时间大于结束时间也需要把结束时间添加到结果集中。因为最后一个时间段是从月初到结束日期的。
实现的方式就和思路中是一样的,一些注释都写在代码中了,如下图所示:
/**
* 按照月份分割一段时间
*
* @param startTime 开始时间戳(毫秒)
* @param endTime 结束时间戳(毫秒)
*/
public static List<Long> getIntervalTimeByMonth(Date startTime, Date endTime) {
List<Long> 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<Long> 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);
}
}
测试的结果如下所示:
“Java如何将时间按月份分段”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。