当前位置: 首页 > wzjs >正文

为代理网站做网站手机app下载软件安装

为代理网站做网站,手机app下载软件安装,即时设计在线设计,安徽省通信建设管理局网站背景 报表需求,需要传递每组数据中最小的日期,后台根据传递的最小日期,向前取参数传递的月份的上个月为结束时间的近五个月数据 例:参数传:2025/02,则需返回2025/01, 2024/12, 2024/11, 2024/10, 2024/09这五个年月数据…

背景

        报表需求,需要传递每组数据中最小的日期,后台根据传递的最小日期,向前取参数传递的月份的上个月为结束时间的近五个月数据
例:参数传:2025/02,则需返回2025/01, 2024/12, 2024/11, 2024/10, 2024/09这五个年月数据。

实现方案

        先将请求参数按照/进行分割,得到年与月份,然后使用日历类Calendar,进行设置。获取到2025年1月31号23点59分59秒999毫秒的结束时间与
2024年9月30号0点0分0秒000毫秒的开始时间,然后按照开始时间与结束时间查询出该时段的所有数据,并按照年/月进行分组统计。

示例代码

public static Date getEndTime(String date, int months) {// 分割输入字符串为年和月String[] parts = date.split("/");int year = Integer.parseInt(parts[0]);int month = Integer.parseInt(parts[1]);// 创建 Calendar 实例(默认系统时区)Calendar calendar = Calendar.getInstance();// 设置年月(注意月份需减1)calendar.set(Calendar.YEAR, year);// 0-11 对应 1-12月calendar.set(Calendar.MONTH, month - 1);// 时间部分清零(时、分、秒、毫秒)calendar.set(Calendar.HOUR_OF_DAY, 23);calendar.set(Calendar.MINUTE, 59);calendar.set(Calendar.SECOND, 59);calendar.set(Calendar.MILLISECOND, 999);calendar.add(Calendar.MONTH, months);calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));return calendar.getTime();
}

上述代码单元测试结果,输出2025-01-21 23:59:59.999,符合预期

异常场景 

当执行这段代码的时间如果在月底,且当前月份的天数大于请求参数所在月份时,则会报错,如下,如果执行方法的时间为5月30号,请求参数"2025/02"时,则获取不到预期值:2025-01-21 23:59:59.999,返回数据仍为:2025-02-28 23:59:59.999.

问题原因分析

原始代码的执行流程

  1. Calendar.getInstance() sun.util.locale.provider.CalendarProviderImpl#getInstance 可以参考此方法

    • 默认获取当前时间:2025/05/30(假设调用时的时间)。

    • 此时 DAY_OF_MONTH=30

  2. 设置年月

    calendar.set(Calendar.YEAR, 2025);  // 2025年
    calendar.set(Calendar.MONTH, 1);    // 2月(Calendar.MONTH 是 0-11)
    • 此时日期变为 2025/02/30,但 2月没有30天,所以 Calendar 会自动调整到 2025/03/02(因为 2025年2月只有28天,30 - 28 = 2,所以变成3月2日)。

  3. calendar.add(Calendar.MONTH, -1)

    当前是 2025/03/02,减去1个月变成 2025/02/02(不是1月,因为3月减1是2月)。
  4. calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH))

    • 2月的最大天数是28(2025年不是闰年),所以最终日期是 2025/02/28 23:59:59.999

为什么返回的是2月的最后一天?

  • 关键问题calendar.set(Calendar.MONTH, 1) 设置2月时,由于当前 DAY_OF_MONTH=30(来自 Calendar.getInstance()),而2月没有30天,所以 Calendar 自动调整到了 3月2日

  • 然后 add(Calendar.MONTH, -1) 变成 2月2日,而不是预期的1月。

  • 最后设置月末日期,得到 2025/02/28 23:59:59.999

修复方案

public static Date getEndTime(String date, int months) {String[] parts = date.split("/");int year = Integer.parseInt(parts[0]);int month = Integer.parseInt(parts[1]);Calendar calendar = Calendar.getInstance();// 先清除时间部分,避免当前日期影响calendar.clear();  // 或 calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置年月calendar.set(Calendar.YEAR, year);calendar.set(Calendar.MONTH, month - 1);  // 0-11// 加减月份calendar.add(Calendar.MONTH, months);// 设置月末最后一天 + 23:59:59.999calendar.set(Calendar.HOUR_OF_DAY, 23);calendar.set(Calendar.MINUTE, 59);calendar.set(Calendar.SECOND, 59);calendar.set(Calendar.MILLISECOND, 999);calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));return calendar.getTime();
}

 总结

  • 原始问题:由于 Calendar 初始化时携带了当前日期(如30日),而2月没有30天,导致自动调整到3月2日,再 -1 个月变成2月2日,最终返回2月末。

  • 修复方法:在设置年月前 清除 DAY_OF_MONTH(如 calendar.clear() 或 set(DAY_OF_MONTH, 1)),避免当前日期影响计算。

这样,传入 "2025/02" 和 -1 时,就能正确返回 2025年1月31日 23:59:59.999


文章转载自:

http://oLmAQzoC.xmdbq.cn
http://RrMPXDpy.xmdbq.cn
http://ek5hZeBS.xmdbq.cn
http://9rHVYjpk.xmdbq.cn
http://5Au9SAtw.xmdbq.cn
http://KtgH6wC4.xmdbq.cn
http://x4DZNoT9.xmdbq.cn
http://ZXRslGoJ.xmdbq.cn
http://EIinl9Gg.xmdbq.cn
http://SKLZRGXq.xmdbq.cn
http://UgaSuYOa.xmdbq.cn
http://Wdpx5j07.xmdbq.cn
http://hSQlHKz3.xmdbq.cn
http://3BBFpM4u.xmdbq.cn
http://wOgpwZTM.xmdbq.cn
http://JKxfq2YU.xmdbq.cn
http://1ltjvDae.xmdbq.cn
http://SDt0uX14.xmdbq.cn
http://3eTzjjrG.xmdbq.cn
http://LiVjNCne.xmdbq.cn
http://Qu90aexs.xmdbq.cn
http://LoF5S8c1.xmdbq.cn
http://StlqeKNq.xmdbq.cn
http://VYYHEEuR.xmdbq.cn
http://ShJzXx0A.xmdbq.cn
http://4VYbtNeO.xmdbq.cn
http://u8SYBEXh.xmdbq.cn
http://MSqEobfE.xmdbq.cn
http://Hc5wjho0.xmdbq.cn
http://y8K25MES.xmdbq.cn
http://www.dtcms.com/wzjs/634425.html

相关文章:

  • 课堂资源管理网站开发需求分析四川成都现在可以去吗
  • 如何清空网站数据库小程序商城多少钱
  • 百度建网站要多少钱线报网站如何做
  • 建设商城网站的难点成都可以做网站的公司
  • 福州正规网站建设公司报价对比的网站建设
  • 做网站的人怎么上传内容的不会写程序如何做网站
  • 做前后端网站教程php导航网站
  • 网站建设正规代理商湖南长沙解封通知最新
  • 企业网站建站模板湖北十堰了不得科技网络公司
  • 重庆做的好的房产网站宣传片拍摄思路怎么写
  • 北京高端网站建设制作设计加强普法网站和普法网络集群建设
  • 房地产网站建设策划方案表白网站制作器
  • 建设部举报网站域名注册地址查询
  • vps lnmp wordpress广西壮族自治区在线seo关键词排名优化
  • 安徽鑫华建设有限公司网站PHP工具箱和WordPress
  • asp 网站 模板网站搭建用什么语言
  • 青岛做网站建设多少钱做网站的回扣
  • 托管网站服务器做任务领q币网站
  • 东莞建设小学网站网站建设的要求及标准
  • 工业设计创意网站金凤区建设交通局网站
  • 老电脑做网站服务器公司要求做网站
  • 惠阳营销网站制作好的漂亮的淘宝客网站模板
  • 襄阳市建设工程质量监督站网站做网站放广告
  • 范县网站建设佛山信息技术网站开发
  • 做儿童方面的网站简单大气的建筑公司名字
  • 家教网站建设南宁专业网站制作前十排名
  • 景观小品设计网站推荐重庆建设工程信息网官网平台
  • 自己做自营网站贵阳餐饮网站建设
  • 木马科技网站建设重庆市住房和城乡建设网站
  • 南京米雅途做网站如何怎样在在农行网站上做风险评估