如何确认某日是否为工作日(休息日)

news/2024/11/30 13:41:48/

最近因为某些坏事,做了这么一个用来确认工作日的逻辑,前一阵子看到论坛上有些人也在问思路什么的,所以就在这里记录下

首先需要说明:因为这个判断只基于日期,未基于小时,所以这个判断标准不支持跨日,即不支持从某一天晚上到第二天早上,也就是俗称的夜班

其实判断某一天是否为工作日的逻辑非常简单:

1、按常规情况判断该日期是否是工作日

2、在第一步的基础上,判断该日期是否为特殊日期,所谓的特殊日期就是按常规情况应该是上班的,但实际这天是休息日;按常规情况应该是休息的,但实际情况是工作日,即常规判断标准取反

3、因为特殊日期是由国家每年公布,所以这需要有个维护的功能

下面是特殊日期维护小工具的一个截图,这里用xml作为持久化处理的载体,实际可以用数据库之类的进行持久化


这个小工具包含增删以及查,编辑就没有了,因为不需要,这里的常规判断标准如工具右上角备注:默认周六周日休息,其他时间为工作时间,另外2015年的特殊日期已经按国家规定进行了维护,小工具可维护的年份为当前年份及下一个年份,当然如果你要维护更多的年份,那只需要将相应的代码稍做处理即可

小工具源码下载

在小工具维护好特殊日期之后,那判断是否为工作日期的代码就仅仅如下几行即可

        /// <summary>/// 判断指定日期是否是工作时间/// </summary>/// <param name="dt"></param>/// <returns>true表示工作日,false表示非工作日</returns>private static bool IsWorkDay(DateTime dt){bool isWorkDay = (int)dt.DayOfWeek > 0 && (int)dt.DayOfWeek < 6;//此处可按实际需要进行调整string filePath = string.Format("{0}{1}{2}.xml", ConfigurationManager.AppSettings["xmlDirectory"], ConfigurationManager.AppSettings["xmlFileName"], dt.Year);XElement root = XElement.Load(filePath);//如果有必要,可以将特殊日期集合做缓存,判断也就只需判断Date是否相同,而不是下面的转化成stringif (root.Elements("SpecialDate").Any(s => s.Value == dt.ToString("yyyy-MM-dd"))){isWorkDay = !isWorkDay;}//Logger.Write(dt.ToString("yyyy-MM-dd ") + (isWorkDay ? "属于工作时间" : "属于非工作时间"), LogCategories.WorkDay);return isWorkDay;}
补充下:如果要判断某日是否为法定节假日什么的,这个就支持不了了,当然要支持的话,可以在特殊日期部分增加标志位,然后判断标准适当的调整下


http://www.ppmy.cn/news/676199.html

相关文章

【Oracle】获取最近工作日及前N个工作日

需求&#xff1a; 日历表 TCALENDAR_DATES&#xff0c;工作日flag‘1’&#xff0c;非工作日‘0’&#xff0c;取任一查询日期最近工作日&#xff0c;及最近工作日前n个工作日 日历表TCALENDAR_DATES样式 SELECT T.BASE_DATE, T.CAL_DAY, C.LAST_3_DAYFROM (SELECT C1.CAL_DA…

计算每个月的工作日

public static void main(String[] args) {System.out.println(countWorkDay(2018, 6)); }/*** 获取指定年月有多少个工作日&#xff09;** param year* param month* return*/ public static int countWorkDay(int year, int month) {Calendar c Calendar.getInstance();c.se…

【面试资料】Spring中用到了哪些设计模式?

面试时&#xff0c;初中级Java程序员一般都会问到的问题&#xff1a;Spring用到了哪些设计模式&#xff1f; 其实只要Spring使用得够熟练&#xff0c;回答这道题还是非常轻松的。因为Spring的命名非常规范&#xff0c;基本上从类名就可以看得出来用到了哪些设计模式。常用的有8…

腾讯云国际DDOS攻击常见哪些问题呢?

有 DDoS 攻击会通知吗&#xff1f; 在遭受 DDoS 攻击后&#xff0c;后台会进行告警通知推送。用户也可以根据需求自定义告警的阈值&#xff0c;当流量达到用户设定的警告阈值&#xff0c;将进行通知。具体操作请参考 设置安全事件通知。 服务器没有使用&#xff0c;为什么也遭遇…

战网修改服务器,使命召唤17战网锁区怎么办 战网修改登录地区方法

使命召唤17的PC版在战网发售&#xff0c;但是锁国区&#xff0c;需要玩家修改战网的登录地区才能购买游玩。下面为大家带来由“yjyj98879”分享的使命召唤17战网修改登录地区方法&#xff0c;希望能帮到大家。 战网修改登录地区方法&#xff1a; 1.打开此电脑在上方的栏内输入“…

暴雪战网客户端上使用的那些开源库!

为什么80%的码农都做不了架构师&#xff1f;>>> Qt 大名鼎鼎的界面框架&#xff0c;不用介绍了吧&#xff01;可能是为了跨平台吧&#xff0c;Win&#xff0c;Mac等等 Chromium Embedded Framework&#xff08;CEF&#xff09; 用于嵌入基于 Google Chromium 项目…

战网服务器修改 win8,如何修改战网客户端?修改战网客户端的方法

今天小编就带大家来共同学习修改 战网 客户端的方法希望可以帮助到有需要的小伙伴哦&#xff0c;下面就是详细完整的操作步骤。 方法/步骤 1.开启隐藏文件可见 在我的电脑里打开工具--》文件夹选项---》显示所有文件文件夹 找到battle.net中配置文件地址&#xff0c;一般是如下…

记录--Threejs-着色器实现一个水波纹

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 hree.js 是一个基于 WebGL 的 JavaScript 3D 库&#xff0c;用于创建和渲染 3D 图形场景。 一、 图像渲染过程 1、webGL webGL: WebGL 是一种基于 JavaScript API 的图形库&#xff0c;它允许在浏览器…