java实现根据延迟法定退休政策计算退休年龄

news2024/11/5 21:37:07

一、计算规则

从2025年1月1日起,男职工和原法定退休年龄为五十五周岁的女职工,法定退休年龄每四个月延迟一个月,分别逐步延迟至六十三周岁和五十八周岁;原法定退休年龄为五十周岁的女职工,法定退休年龄每二个月延迟一个月,逐步延迟至五十五周岁。国家另有规定的,从其规定。

原文链接:全国人民代表大会常务委员会关于实施渐进式延迟法定退休年龄的决定

二、编码实现:

import java.time.LocalDate;
import java.time.Period;
import java.time.temporal.ChronoUnit;

import lombok.Data;

/**
 *
 * <p>
 * 从2025年1月1日起,男职工和原法定退休年龄为五十五周岁的女职工,法定退休年龄每四个月延迟一个月,分别逐步延迟至六十三周岁和五十八周岁;</>
 * <p>
 * 原法定退休年龄为五十周岁的女职工,法定退休年龄每二个月延迟一个月,逐步延迟至五十五周岁。国家另有规定的,从其规定。</>
 * 
 * @author lidongyang
 * @date 2024/9/14 08:46
 * @since V1.0.0
 */
public class RetirementAgeCalculator {
    public static void main(String[] args) {
        LocalDate birthDate = LocalDate.of(1990, 10, 10);
        // 示例原退休年龄
        int oldRetirementAge = 60;


        RetirementInfo retirementInfo = calculateNewRetirement(birthDate, oldRetirementAge);

        System.out.println("新的退休年龄: " + retirementInfo.getRetirementAge());
        System.out.println("预计退休日期: " + retirementInfo.getRetirementDate());
        System.out.println("延迟的月数: " + retirementInfo.getDelayMonth() + "个月");
        System.out.println(
                "距离退休还有: " + (ChronoUnit.DAYS.between(LocalDate.now(), retirementInfo.getRetirementDate())-1) + "天");
    }

    /**
     * 计算新的退休信息
     * 
     * @param birthDate
     * @param oldRetirementAge
     * @return
     */
    private static RetirementInfo calculateNewRetirement(LocalDate birthDate, int oldRetirementAge) {
        RetirementInfo retirementInfo = new RetirementInfo();
        LocalDate startDelayDate = LocalDate.of(2025, 1, 1);
        // 计算原退休日期
        LocalDate oldRetirementDate = birthDate.plusYears(oldRetirementAge);
        // 计算新的退休日期 超过原退休日期后新的退休日期每隔四个月加一个月,直到加满36个月截止
        LocalDate newRetirementDate;
        // 延迟月份
        int monthsToDelay = 0;
        // 最大延迟月份数
        int maxMonthsToDelay = 36;
        // 被除数
        // 男职工和原法定退休年龄为五十五周岁的女职工,法定退休年龄每四个月延迟一个月
        int dividend = 4;
        if (oldRetirementAge == 50) {
            // 原法定退休年龄为五十周岁的女职工,法定退休年龄每二个月延迟一个月
            dividend = 2;
            maxMonthsToDelay = 60;
        }

        // 如果原退休日期在延迟开始日期之前,则使用原退休日期
        if (oldRetirementDate.isBefore(startDelayDate)) {
            newRetirementDate = oldRetirementDate;
        } else {
            // 计算超过起始延迟日期后需要增加的月份数
            Period period = Period.between(startDelayDate, oldRetirementDate);
            int monthsToAdd = period.getYears() * 12 + period.getMonths() + 1;
            // 每过四个月加一个月
            monthsToDelay = monthsToAdd / dividend;
            int remainder = monthsToAdd % dividend;
            if (remainder != 0) {
                monthsToDelay++;
            }

            if (monthsToDelay > maxMonthsToDelay) {
                monthsToDelay = maxMonthsToDelay;
            }

            // 原退休日期+延迟退休的月份
            newRetirementDate = oldRetirementDate.plusMonths(monthsToDelay);
        }

        retirementInfo.setDelayMonth(monthsToDelay);
        retirementInfo.setRetirementDate(newRetirementDate.withDayOfMonth(birthDate.getDayOfMonth()));

        // 计算退休年龄
        int age = Period.between(birthDate, newRetirementDate).getYears();
        int month = Period.between(birthDate, newRetirementDate).getMonths() % 12;

        retirementInfo.setRetirementAge(String.format("%s岁%s个月", age, month));

        return retirementInfo;
    }
}


@Data
class RetirementInfo {
    private String retirementAge;
    private Integer delayMonth;
    private LocalDate retirementDate;
}

三、运行结果

运行结果与对照表一致

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2134890.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

应急响应实战---是谁修改了我的密码?

前言&#xff1a;此次应急响应为真实案例&#xff0c;客户反馈无法通过密码登录服务器&#xff0c;疑似服务器被入侵 0x01 如何找回密码&#xff1f; 客户服务器为windows server2019&#xff0c;运维平台为PVE平台&#xff1b;实际上无论是windows系统或者是linux系统&#…

从简单分析到智能问数,Smartbi AIChat让数据回归业务

大数据产业创新服务媒体 ——聚焦数据 改变商业 在某科技公司&#xff0c;资深数据分析师李晨&#xff08;化名&#xff09;正忙于分析新产品的市场表现。面对传统自助式BI工具&#xff0c;李晨在功能界面中手动设置各种查询条件&#xff0c;进行了一番复杂的拖拉拽操作&#…

spring模块(六)spring监听器(3)广播与异步问题

发布事件和监听器之间默认是同步的&#xff1b;监听器则是广播形式。demo&#xff1a; event&#xff1a; package com.listener.demo.event;import com.listener.demo.dto.UserLogDTO; import org.springframework.context.ApplicationEvent;public class MyLogEvent extends…

界面控件DevExpress中文教程:如何PDF图形对象的可见性?

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。屡获大奖的软件开发平台DevExpress 近期重要版本v24.1已正式发布&#xff0c;该版本拥有众多新产…

数据资产盘点

数据资产盘点包含调研诊断、数据盘点、数据对标校正、分类分级、权责划分、数据资产目录建立六大环节。调研诊断&#xff1a;通常采用访谈或案头梳理的方式&#xff0c;对 IT 整体建设情况、业务系统数据情况进行调研&#xff0c;框定数据资产管理范围、聚焦目标。 数据盘点&a…

spring整合mabatis框架(druid连接池)

spring整合mabatis框架&#xff0c;duird连接池&#xff0c;Junit5测试框架 1&#xff09;创建Maven工程 2&#xff09;导入相关的依赖 <!--springContext依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-contex…

helm一键化部署pod

目录 概念 安装helm helm的命令 自定义模版 回滚 概念 helm提供了一个模版&#xff0c;可以一键化的部署微服务。它通过打包的方式&#xff0c;把所有需要的yaml文件集合一起&#xff0c;然后一键部署&#xff0c;还可以支持回滚。 helm的本质&#xff1a;就是可以把k8s…

低压电抗器与电容器安装距离

低压电抗器与电容器的安装距离是一个关键问题&#xff0c;主要考虑电气安全、热效应以及电磁干扰等因素。通常建议保持适当的安装距离以确保设备的正常运行和安全性。 以下是一些常见的参考原则&#xff1a; 1、热效应 电抗器和电容器在运行过程中都会产生热量。如果两者之间距…

代数模型(Algebraic Models)---线性规划------ + 案例 + Python源码求解(见文中)

目录 一、代数模型&#xff08;Algebraic Models&#xff09;详解1.1什么是代数模型&#xff1f;1.2代数模型的基本形式1.3 安装所需要的Python包--运行下述案例1.4代数模型的应用案例案例 1&#xff1a;市场供需平衡模型Python求解代码Python求解结果如下图&#xff1a; 案例 …

GDPU MySQL数据库 天码行空1 数据库的创建和基本操作

一、实验目的 1&#xff0e;熟知机房用机安全规则。 2&#xff0e;通过上机操作&#xff0c;加深对数据库系统理论知识的理解&#xff1b;通过使用具体的DBMS&#xff0c;了解一种实际的数据库管理系统&#xff0c;并掌握其操作技术&#xff1b;通过对实际题目的上机实验&…

Java8的函数式编程简介

文章目录 环境背景方法方法1&#xff1a;Java 7&#xff08;传统方法&#xff09;方法2&#xff1a;Java 7 &#xff08;策略模式&#xff09;方法3&#xff1a;Java 8的Lambda表达式方法4&#xff1a;Java 8内建的函数式接口Predicate方法5&#xff1a;Java 8的方法引用方法6&…

JavaSE:5、类与对象

1、类的定义与对象的创建 定义属性 创建对象 2、对象的使用 使用一个变量来指代某个对象&#xff0c;只不过引用类型的变量&#xff0c;存储的是对象的引用&#xff0c;而不是对象本身 public class Main {public static void main(String [] argv){Person p1new Person();P…

Oracle发送邮件功能:配置自动化发信指南?

Oracle发送邮件服务设置方法&#xff1f;怎么用Oracle数据库发信&#xff1f; Oracle数据库作为企业级应用的核心&#xff0c;其内置的发送邮件功能为企业提供了强大的自动化工具。AokSend将详细介绍如何配置Oracle发送邮件功能&#xff0c;以实现自动化发信&#xff0c;从而提…

C和指针:指针

内存和地址 程序视角看内存是一个大的字节数组&#xff0c;每个字节包含8个位&#xff0c;可以存储无符号值0至255,或有符号值-128至127。 多个字节可以合成一个字&#xff0c;许多机器以字为单位存储整数&#xff0c;每个字一般由2个或4个字节组成。 由于它们包含了更多的位&…

react native(expo)多语言适配

项目基于 expo框架 开发。请先配置好 expo 开发环境 1.引入i18n-js npx expo install i18n-js 2.新建languages文件夹&#xff0c;其中包括英文、中文等语种目录。结构如下&#xff1a; *.json文件为语种翻译后的json键值对&#xff0c;用于UI中引用; { "appName&q…

【C语言】(指针系列3)数组指针+函数指针+typedef+函数数组指针+转移表

前言&#xff1a;前言&#xff1a;开始之前先感谢一位大佬&#xff0c;清风~徐~来-CSDN博客&#xff0c;由于是时间久远&#xff0c;博主指针的系列忘的差不多了&#xff0c;所以有顺序部分借鉴了该播主的&#xff0c;同时也加入了博主自己的理解&#xff0c;有些地方如果解释的…

MySQL语句案例编写复习

先看我的表数据和结构 1.查询年龄为16,17,18,19岁的女性员工信息。 select * from emp where gender 女 and age in(16,17,18,19); 2.查询性别为 男 &#xff0c;并且年龄在 20-40 岁(含)以内的姓名为三个字的员工。 select * from emp where gender 男 and age between …

猫罐头多久喂一次?营养健康的罐头推荐

一&#xff0e;猫罐头多久喂一次 猫咪长期只食用干粮&#xff0c;容易饮水不足&#xff0c;从而引发上尿道或膀胱结石、堵塞等问题&#xff0c;所以最好每周喂至少2个猫罐头&#xff0c;帮助猫咪补充水分。如果条件允许&#xff0c;全罐喂养&#xff0c;每天都给猫咪吃猫罐头是…

车机中 Android Audio 音频常见问题分析方法实践小结

文章目录 前言1. 无声2. 断音3. 杂音4. 延迟播放5. 焦点问题6. 无声问题(连上 BT )其他完善中…… 前言 本文主要总结了一下车机开发中遇到的 Audio 有关的问题&#xff0c;同时参考网上的一案例&#xff0c;由于Audio 模块出现音频问题的场景很多&#xff0c;对每一个出现的问…

Blender渲染太慢怎么办?blender云渲染已开启

动画行业蓬勃发展&#xff0c;动画制作软件亦持续推陈出新&#xff0c;当制作平台日益丰富&#xff0c;创作难度降低&#xff0c;创作效率提升&#xff0c;如何高效完成复杂动画的渲染就成了从业者更关心的问题。 云渲染技术的出现&#xff0c;无疑为动画制作者提供了前所未有…