java计算月份所在的季度

2023-11-14

java计算月份所在的季度:(月份+2)/ 3

下班的时候无意中看到同事写的根据月份计算季度的代码:

    /**
     * 获取两个时间内的季度集合
     * 返回结果说明 quarterList1["2019-1"] quarterList2["2019年1季度"]
     *
     * @param startDate
     * @param endDate
     * @return
     * @throws Exception
     */
	public static Map<String, List<String>> getQuartersBetweenTwoDate(Date startDate, Date endDate) throws Exception {
        Map<String, List<String>> map = new HashMap<>(2);
        List<String> quarterList1 = new ArrayList<>();
        List<String> quarterList2 = new ArrayList<>();
        List<String> monthList = DateUtil.getMonthDateBetweenTwoDate(startDate, endDate);
        for (String dateStr : monthList) {
            Date date = DateUtil.parseDate(dateStr + "-01");
            int year = DateUtil.getYY(date);
            int month = DateUtil.getMM(date);
            String quarter = "", quarter1 = "", quarter2 = "";
            if (month >= 1 && month <= 3) {
                quarter = "1";
            } else if (month >= 4 && month <= 6) {
                quarter = "2";
            } else if (month >= 7 && month <= 9) {
                quarter = "3";
            } else if (month >= 10 && month <= 12) {
                quarter = "4";
            }
            quarter1 = year + "-" + quarter;
            quarter2 = year + "年" + quarter + "季度";
            if (!quarterList1.contains(quarter1)) {
                quarterList1.add(quarter1);
            }
            if (!quarterList2.contains(quarter2)) {
                quarterList2.add(quarter2);
            }
        }
        map.put("quarterList1", quarterList1);
        map.put("quarterList2", quarterList2);
        return map;
    }

头皮一阵发麻……
难道除了以下这种方式真的没有最优解了吗?

if (month >= 1 && month <= 3) {
    quarter = "1";
} else if (month >= 4 && month <= 6) {
    quarter = "2";
} else if (month >= 7 && month <= 9) {
    quarter = "3";
} else if (month >= 10 && month <= 12) {
    quarter = "4";
}

打开excel找找规律:
在这里插入图片描述
等等,好像发现了些什么。。。3、6、9、12都正好是3的整数倍!!!

import java.util.Calendar;
import java.util.Date;
public class TestDate {
    
    public static void main(String[] args) {
        //模拟一波月份
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
        for (int i = 0; i < arr.length; i++) {
            //月份对应季度
            int quarter = (arr[i] + 2) / 3;
            System.out.println(arr[i] + "月对应季度:" + quarter);
        }
    }

    /**
     * 获取日期的月份
     *
     * @param date 日期
     * @return 月份
     */
    public static int getMM(Date date) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar.get(Calendar.MONTH) + 1;
    }
}

对应月份的季度:

1月对应季度:1
2月对应季度:1
3月对应季度:1
4月对应季度:2
5月对应季度:2
6月对应季度:2
7月对应季度:3
8月对应季度:3
9月对应季度:3
10月对应季度:4
11月对应季度:4
12月对应季度:4

头皮不麻了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java计算月份所在的季度 的相关文章

  • 如何检查 Java 中的间隔列表 (Joda-Time) 是否完全覆盖一个月

    我在用着乔达时间 http www joda org joda time Java 中用于跟踪时间列表的库间隔 http www joda org joda time key interval html 我想检查是否有一个列表Interva
  • SWIG 类型映射 uint8_t* 从 C/C++ 到 java.nio.ByteBuffer

    我正在尝试将输入和输出缓冲区从 C 传递给 java 类 出于效率原因 我需要使用 ByteBuffer 这两个缓冲区都是在 C 部分中分配的 我需要将它们传递给一个 java 函数 该函数将使用输入缓冲区进行一些计算并将结果写入输出缓冲区
  • Spring boot 404错误自定义错误响应ReST

    我正在使用 Spring boot 来托管 REST API 即使浏览器正在访问 URL 以及自定义数据结构 我也希望始终发送 JSON 响应 而不是使用标准错误响应 我可以使用 ControllerAdvice 和 ExceptionHa
  • Java - 了解 PrintWriter 和刷新的需要

    好吧 首先我对所有代码表示歉意 但我觉得代码太多总比代码不够好 我正在制作一个简单的聊天客户端和印刷机 尤其是我正在努力解决的问题 使用现在的代码 它将与服务器类交互 并且完美地打印我想要打印的内容 但是 当我删除 writer flush
  • SimpleDateFormat 无法正确处理 DD

    我正在尝试获得这样的格式 2013 06 15 17 45 我在代码中执行以下操作 Date d new Date SimpleDateFormat ft new SimpleDateFormat YYYY MM DD HH mm Stri
  • AES BadPaddingException

    如果我使用错误的密钥或错误的盐进行解密 则会引发 BadPaddingException 我希望返回一个不正确的字符串 doFinal 导致解密方法出现异常 信息 This is just an example Unfug S F V s
  • java模拟自定义对象

    public class MainClass public void makeCall CustomObject obj new CustomObject obj testMethod 我想进行单元测试makeCall 所以我必须嘲笑Cus
  • IntelliJ Idea,如何从控制台删除java文件目录?

    当您运行文件时 它会打开控制台窗口 并且一直在顶部显示该文件所在的目录 这非常令人恼火 因为现在 为了将其他行与目录混合分开 我必须在启动任何 System out println 命令之前使用 n C Program FILEs 我想摆脱
  • 在Tomcat中设置环境变量TESSDATA_PREFIX

    我们正在使用名为 Tess4J 的 Tesseract OCR Java 库 如果作为独立应用程序运行 它可以正常工作 它需要一个名为 TESSDATA PREFIX 的变量 其中包含 tessdata 配置和其他字符集相关文件 它也可以与
  • Java Swing JEditorPane:操作样式文档

    我的模型是与枚举类型关联的字符串队列 我试图在 JEditorPane 中显示该模型 队列中的每个元素作为一个单独的 HTML 段落 其属性基于关联的枚举类型 但是 我的更新方法并没有达到我想要的效果 我尝试将 HTML 字符串直接写入文档
  • 在 JSF 自定义验证器中区分 ajax 请求和完整请求

    我的验证器需要知道它是完整请求还是 ajax 请求 在我当前的解决方案中 我检查 http 请求标头X Requested With元素 public void validate FacesContext context UICompone
  • EasyMock : java.lang.IllegalStateException: 1 个匹配器预期,2 个记录

    我在使用 EasyMock 2 5 2 和 JUnit 4 8 2 通过 Eclipse 运行 时遇到问题 我已阅读此处所有类似的帖子 但尚未找到答案 我有一个包含两个测试的类 它们测试相同的方法 我正在使用匹配器 每个测试单独运行时都会通
  • 如何在开头时解析 json 文件

    我想解析以下 JSON 文件 但以 向我表明这是一个数组 然后继续 对象 我当前的解析器返回一个 JSON 对象 我的问题是 如何修改解析器来解析这个文件 这样解析器将为我提供其他 JSON 文件 从对象或排列开始 JSON 文件 codi
  • 更改 Spring Web 应用程序的默认会话超时

    我必须测试一个由 spring 和 jsp 编写的 Web 应用程序 应用程序的默认会话超时为 30 分钟 我想减少会话超时 为此 我改变了web xml文件输入tomcatInstallationLocation conf 但这不起作用
  • 如何在Android中使用资源

    一个人如何使用资产 我有这个代码 AssetManager assets getAssets InputStream stream assets open test txt 看起来它只能在 Activity 类中使 用 如果我尝试在另一个类
  • 无法从 ViewPager 中的 Fragment 编辑 ActionBar 标题

    我有一个Activity它通过一个托管多个片段ViewPager 在活动的onCreate方法我使用以下代码来更改ActionBar title Toolbar toolbar findViewById R id toolbar setSu
  • 不想保留一对一的实体

    假设我有两节课Employee and Department In Employee我已经写了 OneToOne fetch FetchType EAGER cascade CascadeType ALL JoinColumn name d
  • 使用 Lint 和 SonarQube 分析 Android 项目

    我真的 溢出 了试图让这些东西一起工作 我按照这里的指示进行操作 http docs sonarqube org display PLUG Android Lint Plugin http docs sonarqube org displa
  • 飞碟 - html 实体未呈现

    我正在使用 Flying saucer lib 生成 pdf 但我对一些 html 实体有问题 我已经在寻找解决方案 我在这个论坛和其他地方找到了很多提示 但仍然存在问题 我尝试过这种方法 http sdtidbits blogspot c
  • System.out.println("嗨"+6+10);打印Hi610?

    为什么要这样做 太令人困惑了 运算符优先级和结合性 两点 操作员 如果一个或两个参数都是字符串 则进行字符串连接 操作员 从左到右工作 所以在你的例子中 Hi 6 is Hi6 and Hi6 10 is Hi610 编辑 正如您在对另一个

随机推荐

  • qt制作播放器-进度条属性设置

    QSlider groove horizontal border 1px solid 4A708B background C0C0C0 height 30px border radius 1px padding left 1px paddi
  • Centos8安装WPS

    下载安装包 到wps官网下载linux版本的安装包 根据自己的linux是 32 位还是64位的 下载对应的安装包 我下载的是64位的rpm包 下载地址 http www wps cn product wpslinux 安装目录 如果想安装
  • Unix哲学

    Unix哲学 起源于Ken Thompson在早期关于如何设计一个设计接口简洁 小巧精干的操作系统的思考 随着Unix文化在学习如何尽可能发掘Thompson设计思想的过程中不断成长 同时它还一路上博采众长 Unix哲学并不是一个正规的设计
  • Vue-ElementUI实现前端多选框切换分页选择保留之前选的数据,分页选择、回显功能

    前端页面开发经常会遇到切换分页时 之前页面选的数据不会保存以及选择的数据如何回显的问题 然后之前写的方法还有个bug 新增数据时 选择多个分页的数据保存后 进入编辑页 如果直接保存的话只会提交首页选择的数据 如果是分页一页一页点击过去 最后
  • ==和equals区别

    对于基本数据类型 byte short char int float double long boolean 比较的是值 他们是作为常量在方法区中的常量池里面以HashSet策略存储起来的 对于这样的字符串 123 也是相同的道理 在常量池
  • java取出每年的七夕情人节日期

    83 java取出每年的七夕情人节日期
  • deactivate不能关闭venv

    python virtualenv deactivate 命令无法正常关闭venv虚拟环境 用的是python3 用vritualenv封装项目后发现 venv目录下没有bin目录 activate文件和deactivate文件在Scrip
  • 中小企业实施MES管理系统,这几点需要注意

    制造业是中国经济命脉所系 是立国之本 强国之基 作为世界制造大国 制造业一直是热门话题 当下 中小制造企业的产业地位不断提升 想要规范生产制造 提升产品竞争力 进行实施MES管理系统解决方案的企业越来越多 那么企业应该如何选型才能保证生产管
  • swift UITextField 设置leftView不生效

    swift 给UITextField 设置了 leftView 但是不显示 设置UITextField的光标输入位置 设置UITextField的leftView 但是没显示 视图层上也没有 let iamgeView UIImageVie
  • macOS Monterey 12.0.1 App闪退问题

    Apple还是一贯的尿性 m1升级了最新的macOS Monterey 12 0 1 发现了一些App闪退 CleanMyMac X 偏好设置 gt 通用 gt 取消 声音 这个选项 重新启动就不会闪退了 MWeb 去AppStore下载了
  • 数电常混淆的知识点(结合FPGA)

    组合逻辑最大的缺点就是会存在竞争冒险 这种竞争冒险问题是非常危险的 常常会引起电路的不稳定性和工作时的不确定性 时序逻辑就可以极大地避免上面的问题 从而使系统更加稳定 时序逻辑最基本的单元就是寄存器 寄存器具有存储功能 一般是由 D 触发器
  • 组合逻辑与时序逻辑的综合

    目录 1 综合简介 1 1 逻辑综合 1 2 RTL综合 1 3 高级综合 2 组合逻辑的综合 2 1 优先级结构的综合 2 2 利用逻辑无关紧要条件 2 3 ASIC单元与资源共享 3 带锁存器的时序逻辑综合 3 1 锁存器的无意综合 3
  • ‘StringArray‘ object has no attribute ‘tolist‘的处理方法

    先看原代码 sams pd array 2weq 2 2432 2 2ewq 2 2ew 1 sam pd unique sams sam tolist 想要利用pd的unique函数将列表里的数据进行去重处理 但是其返回的是一个np ar
  • 无影云桌面

    概念 无影云桌面 是阿里云推出的一台放在云上的超级电脑 这是基于云计算和虚拟化技术的云上桌面服务 通过客户端登录云桌面之后 就像操作本地电脑一样 在云端电脑完成开发 办公 并且数据都在云端 在任何地方都可以登录访问 最近体验了一段时间 操作
  • bazel build //:go

    作者简介 何 源 古典互联网从业者 2014年底加入英语流利说 目前主要负责 Platform Team 来流利说工作之前 在 the Plant 杭州工作 内 容 大 纲 1 程序包管理 Package Management 2 代码管理
  • ENVI_IDL:读取OMI数据(HDF5)并输出为Geotiff文件+详细解析

    目录 1 课堂内容 2 知识储备 3 编程 1 课堂内容 读取OMI数据 HDF5 并输出为Geotiff文件 最重要的是数据的处理以及输出 这里我个人觉得难度不大 第一 获取OMI文件的NO2数据集的数据以及对数据中的异常值做处理 譬如全
  • 进程的五种通信方式

    一 管道 1 什么是管道 我们把一个进程连接到另一个进程的数据流称为一个管道 它是最古老的进程通信形式 2 原型 匿名管道 include
  • 【云原生之Docker实战】使用Docker部署File Manager文件管理系统

    云原生之Docker实战 使用Docker部署File Manager文件管理系统 一 File Manager简介 1 File Manager简介 2 File Manager特点 二 检查宿主机系统版本 三 检查本地docker环境
  • 微软禁俄下载、开源投毒攻击、Rust不会重写Linux、开放原子峰会7月举办

    WeOpen Insight 是腾源会推出的 开源趋势与开源洞见 内容专栏 不定期为读者呈现开源圈内的第一手快讯 优质工具盘点等 洞察开源技术发展的风向标 预见未来趋势 1 开源社区新闻 1 Linus Torvalds 称并未用 Rust
  • java计算月份所在的季度

    java计算月份所在的季度 月份 2 3 下班的时候无意中看到同事写的根据月份计算季度的代码 获取两个时间内的季度集合 返回结果说明 quarterList1 2019 1 quarterList2 2019年1季度 param start