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

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

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

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

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是否相同,而不是下面的转化成string
            if (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;
        }
时间: 2024-08-06 02:57:57

如何确认某日是否为工作日(休息日)的相关文章

文本数据挖掘 Matrix67: The Aha Moments

转自:http://www.matrix67.com/blog/archives/5044 互联网时代的社会语言学:基于SNS的文本数据挖掘 今年上半年,我在人人网实习了一段时间,期间得到了很多宝贵的数据,并做了一些还算有意义的事情,在这里和大家一块儿分享.感谢人人网提供的数据与工作环境,感谢赵继承博士.詹卫东老师的支持和建议.在这项工作中,我得到了很多与众人交流的机会,特别感谢 OpenParty . TEDxBeijing 提供的平台.本文已发表在了<程序员>杂志,分上下两部分刊于 201

实验1(19.3.20)

[实验结论] 一.Part1:验证性内容. 1.输出学号. 这个不难,把C语言的基本框架拎出来,再加个printf函数输出就可以了. #include<stdio.h> int main(){ printf("201883300119"); return 0; } PS:如果在printf("201883300119");这句中“”缺失的话系统会提示错误,因为它不符合格式化输出函数printf()的调用格式.(详见书本P45,有详细说明) 2.P3 例1

数据类型、运算符、表达式———第一次上机实验

Part1: 验证性内容 /*学号*/ #include<stdio.h> int main(){ printf("201883300089\n"); printf("yahooooooooooooooooooooooooooo\n") ; return 0; } Hello world改写 /*求两个整数的乘积*/ #include <stdio.h> int product(int,int); /*函数product()*/ int ma

JS中: 1-100之间的奇数和偶数和;求周一到周末的工作日和休息日(switch的方法)

//  1-100之间的奇数和偶数和 先给两个装和的变量 let odd = 0; let even = 0; for (i = 1; i<= 100; i++) { if (i % 2 === 0) { 赋值 even+=i ; } else{ odd+=i; } } console.log('偶数和'+`${even}`,'奇数和'+`${odd}`); 判断用户输入的数是否是质数 console.log('请输入一个数:'); let num = readline.question();

周六周日为休息日的工厂日历修改变成工作日

declare @a int,@Finterid int, @Fdayid int select @Finterid=max(Finterid), @Fdayid=max(Fdayid) from t_MutiWorkCal --select Fdayid,FWeekID, FMonthID, FYearID, FCalID, FPreID, FNxtID, * from t_MutiWorkCal set @a=0 while(@a<1*365) begin insert into t_Mut

是否工作日节假日判定

根据节假日表分析当前日期是否属于节假日配置表的时间以及判定当前日期是否属于双休日 首先建一张节假日表TRA_PricingHoliday  ID  节假日时间  HDate   是否工作日 HType  2表示不上班 非工作日,1表示正常上班工作日 判定代码: private string _strWorkingDayAM = "00:00";//工作时间 private string _strWorkingDayPM = "23:59"; private stri

Java 设定工作日日历

开发清单 JDK 1.7 Servlet 3.0 JSP Dom4j 1.6.1 FullCanlendar 3 后台考虑兼容性,并没有使用数据库,而是采用xml格式存储数据,毕竟一年只有365天,点击FullCanlendar的某一天,设置为休息日,再次点击取消. XML格式为: <?xml version="1.0" encoding="UTF-8"?> <roots xmlns="http://www.phpStudy.net&qu

被逼着写的jquery工作日管理日历插件

因为工作原因,在我刚进入新公司之后,立马要求让我做一个jquery的插件demo.我的天,我面试的可是.net工程师啊.虽然以前接触过js,jquery,但也只是接触过一丢丢啊,没办法,只好硬着头皮上了.写的不好,功能不完善,毕竟只是个小小的demo,不要喷我. 在恶补了不少js知识之后,由于水平有限(其实是一脸懵逼),就找了网上开源的日历插件学习,再貌似看懂了之后,开始了我的创作之旅(抄袭之路). 先定一个小目标,比如先写一个通用插件写法. 通过看了多篇的博客和视频,终于掌握了jquery插件

从两个时间段里分别计算出有几天工作日与周末

直接上代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>从两个时间段里分别计算出有几天工作日与周末</title> <style type="text/css"> #calculate { background-color: #ff6444; padding: 10px