JAVA工作日历天数(工作日/非工作日)- 基于法定节假日

1、背景:

很多场景,需要实现统计工作时长,例如:9:00-18:00 以每天工作9小时为1天,同时需要基于法定节假日(即:国务院会在每年最后一个月公布下一年度法定节假日,涉及工作日为休息,休日为补班情况,导致工作时间天数无法按照周六日模式计算),故:为满足此场景,本组件实现基于 万年历 (需根据国务院公布的法定节假日:每年初维护1 ),通过公用工具类实现动态获取数据,以确保离线(无法访问外网)情况下,工作日历天数的准确性。(很多组件基于互联网接口,本组件可离线使用)

2、设计思路:

2.1、通过以上背景,此工作日历 需要维护 国务院公布的法定节假日 补班日,同时基于万年历(含阴历), 参考百度【2022日历】效果,方便运维人员维护 法定节假日,同时可以直观的展示节假日数据是否准确。

2.2、组件可满足分布式部署(即:多台服务器部署应用,高可用),未使用 缓存 或 Redis,使用DB表存储 法定节假日及补班数据。(G_SYS_CALENDAR - 系统工作日历表:存储 法定节假日 补班数据,其他正常工作日和周六日不存储)

2.3、为方便维护管理,此功能只对系统管理员开发,不对业务开放。故:工作日历效果在后端实现。使用Freemarker技术,未采用vue前后端 分离实现。(即:后端页面一体化实现)

3、实现效果:

4、万年历(工作日历)管理功能说明:

1)全年日历信息展示(包含阴历)。

2)年、月、今日 快速切换展示。

3法定节假日/补班日 标识展示,可与百度日历核对数据是否维护准确。

4)选择对应日期,自动根据后端获取 日期类型(工作/补班日 还是 非工作日/节假日)。

5)选择日期和类型后,点击【保存】按钮,自动异步存储数据,同时局部刷新实时渲染日历标记(休/班)。

5、工作日代码工具类:com.demo.common.calendar.util.CalendarHelper

package com.demo.common.calendar.util;
 
/**
 * Created on 2022/12/02
 * 万年历工具类辅助类,用于获取 万年历中的 工作日+补班(调休日) 等信息,方便用于数据计算
 * 本类需要根据 国务院每年年底 公布的第二年节假日安排,进行一次维护 节假日、补班 日等信息后,自动根据db中存储的数据进行计算工作日天数.
 *
 * @author: herb
 */
 public class CalendarHelper{
   略
}

6、对外提供方法:

方法代码方法参数方法说明其它说明

CalendarHelper.

isDateYYYY_MM_DD(String date)

* @param date 日期字符串 yyyy-MM-dd
* @return boolean true=日期格式;false=非法日期格式
* 匹配校验格式
* 匹配日期:1900-01-01、2205-02-31、2999-12-31
* 不匹配日期:1899-12-31、2018-05-35、2018-13-05、3000-01-01、2018-01-XX
静态方法,可直接调用

CalendarHelper.

isWorkingDay(long time)

* @param time 当前日期时间戳毫秒数
* @return boolean true=工作日,false=非工作日(节假日)

* 校验当前日期是否为工作日

(已包含维护的调休工作日)

静态方法,可直接调用

CalendarHelper.

getWorkingDays(Date start, Date end)

* @param start 开始日期
* @param end 结束日期
* @return int 工作日天数(包含 节假日补班天数)
* 获取计算工作日(包含法定节假日和调休)
* 【以2022官方法定节假日来讲】:
* 1月=21天
*  2月=16天
* 3月=23天
* 依次类推
静态方法,可直接调用

CalendarHelper.

getHoliDays(Date start, Date end)

* @param start 开始日期
* @param end 结束日期
* @return int 非工作日+节假日 总天数(包含节假日)
* 获取计算休息日(包含法定节假日)
* 【以2022 官方法定节假日来讲】:
* 1月=10天 (元旦3天+周六日6天+ 31日 1天)
* 2月=12天 (春节6天 (1月31日不进来) + 周六日6天)
* 3月=8天(周六日 8天) 依次类推
静态方法,可直接调用

ada

/**
 * 获取工作日天数/休息日天数
 * @param args
 */
public static void main(String[] args) {
    //开始日期
    String startDateStr = "2022-02-01";
    Date startDt = DateUtil.parse(startDateStr);
    //结束日期
    String endDateStr = "2022-03-31";
    Date endDt = DateUtil.parse(endDateStr);
 
    //输出工作日天数
    int workDt = CalendarHelper.getWorkingDays(startDt, endDt);
    System.out.println(startDateStr + "至 " + endDateStr + " 》工作日天数为:" + workDt + "天");
     
    //输出 非工作日+节假日 天数
    int holidays = CalendarHelper.getHoliDays(startDt, endDt);
    System.out.println(startDateStr + "至 " + endDateStr + " 》可休息天数为:" + holidays + "天");
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Java和Vue都可以用来实现日历工作日设置功能。 在Java中,可以使用Date类或者Calendar类来表示日期,可以使用SimpleDateFormat类来格式化日期,以便于显示和处理。如果要设置工作日,可以使用Calendar类的setTime()方法设置具体的日期,然后使用Calendar类的get()方法获取该日期的星期几(1代表星期日,2代表星期一,以此类推),根据星期几的值来判断是否是工作日。可以使用if语句或者switch语句来判断是星期几,并根据需要进行相应的操作,比如将工作日标记为true,工作日标记为false。 在Vue中,可以使用moment.js或者Day.js等日期时间处理库来处理日期。可以使用Vue组件来显示日期选择器或者日历,监听日期选择的改变事件,然后在事件处理函数中获取所选择的日期,使用日期时间处理库来获取该日期的星期几,并根据星期几的值来判断是否是工作日。可以使用computed属性或者watch属性来监听日期的变化,并根据需要进行相应的操作,比如将工作日标记为true,工作日标记为false。 无论是使用Java还是Vue,都可以通过设置一个工作日数组来存储工作日,然后根据日期的星期几将对应的工作日标记为true,工作日标记为false。另外,还可以考虑使用数据库存储工作日的设置,方便数据的持久化操作。 总之,使用Java和Vue都可以实现日历工作日设置功能,具体的实现方式可以根据具体的需求和技术框架来确定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

施主、请留步。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值