| | |
| | | package com.finance.common.utils; |
| | | |
| | | import cn.hutool.core.convert.NumberChineseFormatter; |
| | | import cn.hutool.core.date.DateUtil; |
| | | import java.lang.management.ManagementFactory; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | |
| | | public static Map<String, Date> getMonthDate(Date date) { |
| | | Map<String, Date> map = new HashMap<>(2); |
| | | Calendar cal = Calendar.getInstance(); |
| | | //设置指定日期 |
| | | // 设置指定日期 |
| | | cal.setTime(date); |
| | | //获取当月第一天日期 |
| | | // 获取当月第一天日期 |
| | | int first = cal.getActualMinimum(Calendar.DAY_OF_MONTH); |
| | | cal.set(Calendar.DAY_OF_MONTH, first); |
| | | Date firstDay = cal.getTime(); |
| | | map.put("first", firstDay); |
| | | //获取当月最后一天日期 |
| | | // 获取当月最后一天日期 |
| | | int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH); |
| | | cal.set(Calendar.DAY_OF_MONTH, last); |
| | | Date lastDay = cal.getTime(); |
| | |
| | | public static Map<String, Date> getYearDate(Date date) { |
| | | Map<String, Date> map = new HashMap<>(2); |
| | | Calendar cal = Calendar.getInstance(); |
| | | //设置指定日期 |
| | | // 设置指定日期 |
| | | cal.setTime(date); |
| | | //获取本年第一天日期 |
| | | // 获取本年第一天日期 |
| | | int first = cal.getActualMinimum(Calendar.DAY_OF_YEAR); |
| | | cal.set(Calendar.DAY_OF_YEAR, first); |
| | | Date firstDay = cal.getTime(); |
| | | map.put("first", firstDay); |
| | | //获取本年最后一天日期 |
| | | // 获取本年最后一天日期 |
| | | int last = cal.getActualMaximum(Calendar.DAY_OF_YEAR); |
| | | cal.set(Calendar.DAY_OF_YEAR, last); |
| | | Date lastDay = cal.getTime(); |
| | |
| | | * @throws Exception 异常 |
| | | */ |
| | | public static String getNowQuarter() throws Exception { |
| | | //当前所在季度 |
| | | // 当前所在季度 |
| | | Date date = new Date(); |
| | | char quarterOfYear = String.valueOf(getQuarterOfYear(date)).toCharArray()[0]; |
| | | String quarterOfYearStr = NumberChineseFormatter.numberCharToChinese(quarterOfYear, false); |
| | | // char quarterOfYear = String.valueOf(getQuarterOfYear(date)).toCharArray()[0]; |
| | | int quarterOfYear = DateUtil.quarter(date); |
| | | String quarterOfYearStr = NumberChineseFormatter.numberCharToChinese((char) quarterOfYear, |
| | | false); |
| | | LocalDate now = LocalDate.now(); |
| | | return String.format("%s年%s季度", now.getYear(), quarterOfYearStr); |
| | | } |
| | | |
| | | /** |
| | | * 获取上一季度字符串 |
| | | * |
| | | * @return 当前季度字符串 |
| | | * @throws Exception 异常 |
| | | */ |
| | | public static String getPreviousQuarter() throws Exception { |
| | | // 当前日期 |
| | | LocalDate now = LocalDate.now(); |
| | | // 当前月份 |
| | | int currentMonth = now.getMonthValue(); |
| | | // 计算上季度的月份 |
| | | int previousQuarterMonth = currentMonth - 3; |
| | | int previousQuarterYear = now.getYear(); |
| | | |
| | | if (previousQuarterMonth <= 0) { |
| | | previousQuarterMonth += 12; |
| | | previousQuarterYear -= 1; |
| | | } |
| | | |
| | | // 计算上季度的季度数 |
| | | int previousQuarter = (previousQuarterMonth - 1) / 3 + 1; |
| | | // 将季度数转换为汉字 |
| | | String quarterOfYearStr = NumberChineseFormatter.numberCharToChinese( |
| | | (char) (previousQuarter + '0'), false); |
| | | |
| | | // 返回上季度的年份和季度 |
| | | return String.format("%s年%s季度", previousQuarterYear, quarterOfYearStr); |
| | | } |
| | | |
| | | public static Date getQuarterDate(String quarter) { |
| | |
| | | return DateUtils.toDate(startDate); |
| | | } |
| | | |
| | | //测试 getNowQuarter |
| | | public static Date getQuarterDateEnd(String quarter) { |
| | | // 提取年份和季度信息 |
| | | int year = Integer.parseInt(quarter.substring(0, 4)); |
| | | int quarterNumber = NumberChineseFormatter.chineseToNumber(quarter.substring(5, 6)); // 季度数字 |
| | | // 计算季度初的日期 |
| | | LocalDate startDate; |
| | | switch (quarterNumber) { |
| | | case 1: |
| | | startDate = LocalDate.of(year, 3, 1); |
| | | break; |
| | | case 2: |
| | | startDate = LocalDate.of(year, 6, 1); |
| | | break; |
| | | case 3: |
| | | startDate = LocalDate.of(year, 9, 1); |
| | | break; |
| | | case 4: |
| | | startDate = LocalDate.of(year, 12, 1); |
| | | break; |
| | | default: |
| | | throw new IllegalArgumentException("Invalid quarter number: " + quarterNumber); |
| | | } |
| | | return DateUtils.toDate(startDate); |
| | | } |
| | | |
| | | // 测试 getNowQuarter |
| | | public static void main(String[] args) throws Exception { |
| | | SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | String nowQuarter = getNowQuarter(); |
| | | System.out.println(nowQuarter); |
| | | System.out.println(NumberChineseFormatter.chineseToNumber("一")); |
| | | System.out.println(simpleDateFormat.format(getQuarterDate("2024年一季度"))); |
| | | System.out.println(simpleDateFormat.format(getQuarterDateEnd("2024年一季度"))); |
| | | String month = DateUtil.format(getQuarterDateEnd("2024年一季度"), "MM"); |
| | | System.out.println(Double.parseDouble(month)); |
| | | System.out.println(simpleDateFormat.format(getQuarterDate("2024年二季度"))); |
| | | System.out.println(simpleDateFormat.format(getQuarterDate("2024年三季度"))); |
| | | System.out.println(simpleDateFormat.format(getQuarterDate("2024年四季度"))); |
| | | System.out.println(simpleDateFormat.format(getQuarterDate("2024年四季度"))); |
| | | System.out.println( |
| | | DateUtil.format(getQuarterDateEnd(getPreviousQuarter()), "yyyy-MM-dd HH:mm:ss")); |
| | | System.out.println( |
| | | DateUtil.format(getQuarterDate(getPreviousQuarter()), "yyyy-MM-dd HH:mm:ss")); |
| | | System.out.println(getLastYearQuarter("2024年四季度")); |
| | | } |
| | | |
| | | public static String getLastYearQuarter(String previousQuarter) { |
| | | // 提取年份和季度信息 |
| | | String year = previousQuarter.substring(0, 4); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); |
| | | try { |
| | | // 今年 |
| | | Date date = sdf.parse(year); |
| | | // 根据date获取去年的日期 |
| | | Calendar calendar = Calendar.getInstance(); |
| | | calendar.setTime(date); |
| | | calendar.add(Calendar.YEAR, -1); |
| | | Date lastYear = calendar.getTime(); |
| | | return String.format("%s年%s", sdf.format(lastYear), previousQuarter.substring(5)); |
| | | } catch (ParseException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | } |