文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java如何将时间按月份分段

2023-06-20 14:35

关注

本篇内容介绍了“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); // 日

二、思路分析

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

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

三、实现方案

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

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如何将时间按月份分段

“Java如何将时间按月份分段”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯