获取截止日期,包括对节假日、补班、双休的处理

话说月光族的小明申请办了一张信用卡,银行规定,在受理成功后10个工作日(假设正常双休不上班)之后将可领取信用卡。tags:小明的本次办卡业务将在那天完成?

分析需求:根据受理日期,由10个工作日这个限制条件,计算出截止日期即可,其中需要对正常双休,国家法定节假日,补班等情况进行处理。

解决方案:

    1、创建表存放国家法定节假日和补班的日期数据。(国家每年都会发布新的假期数据)。

    2、根据开始时间和有效工作日2个输入条件,输出截止日期。

代码段:

 1      /// <summary>
 2         /// 根据开始时间和有效工作日,计算得出截止日期,包括对节假日、补班、双休的处理
 3         /// </summary>
 4         /// <param name="dt">办理日期</param>
 5         /// <param name="workDay">多少工作日</param>
 6         /// <returns></returns>
 7         public DateTime CalculateEndDate(DateTime dt, int workDay)
 8         {
 9             DateTime tempDate = dt;
10             while (workDay-- > 1)
11             {
12                 //①判断是否是法定节假日
13                 bool hoilday = false;
14                 tempDate = IsHoilday(tempDate, ref hoilday);
15                 if (hoilday)
16                     continue;
17                 //②判断是否是双休和补班
18                 if (tempDate.DayOfWeek == DayOfWeek.Saturday || tempDate.DayOfWeek == DayOfWeek.Sunday)
19                 {
20                     tempDate = IsWeeked(tempDate);
21                     continue;
22                 }
23                 //最后一天为周末,需要往后一个工作日推
24                 if (workDay == 0 && (tempDate.DayOfWeek == DayOfWeek.Saturday || tempDate.DayOfWeek == DayOfWeek.Sunday))
25                 {
26                     tempDate = IsWeeked(tempDate.AddDays(1));
27                 }
28             }
29             return new DateTime(tempDate.Year,tempDate.Month,tempDate.Day,23,59,59);
30         }

判断是否法定补班:

 1      /// <summary>
 2         /// 检查是否为法定补班
 3         /// </summary>
 4         /// <param name="dt">日期</param>
 5         /// <returns></returns>
 6         private DateTime IsWeeked(DateTime dt)
 7         {
 8             bool isWorkday = false;
 9             DateTime tempDate = dt;
10             bool result = OracleServiceFactory.LoadService<IHoildayService>().IsHoilday(tempDate, ENUM_节假日类型.补班);
11             if (!result)
12             {
13                 while (!isWorkday)
14                 {
15                     tempDate = tempDate.AddDays(1);
16                     result = OracleServiceFactory.LoadService<IHoildayService>().IsHoilday(tempDate, ENUM_节假日类型.补班);
17                     if (!result)
18                     {
19                         tempDate = tempDate.AddDays(1);
20                         isWorkday = true;
21                         break;
22                     }
23                 }
24             }
25             return tempDate;
26         }

判断是否为节假日放假:

 1      /// <summary>
 2         /// 判断是否为节假日放假
 3         /// </summary>
 4         /// <param name="dt">日期</param>
 5         /// <param name="isHoilday">初始化</param>
 6         /// <returns></returns>
 7         private DateTime IsHoilday(DateTime dt, ref bool isHoilday)
 8         {
 9             DateTime tempDate = dt;
10             bool result = OracleServiceFactory.LoadService<IHoildayService>().IsHoilday(tempDate, ENUM_节假日类型.法定节假日);
11             if (!result)
12                 tempDate = tempDate.AddDays(1); //正常上班日
13             else
14             {
15                 //是节假日
16                 while (!isHoilday)//往前推,直到不是节假日为止
17                 {
18                     tempDate = tempDate.AddDays(1);
19                     result = OracleServiceFactory.LoadService<IHoildayService>().IsHoilday(tempDate, ENUM_节假日类型.法定节假日);
20                     if (!result)
21                     {
22                         isHoilday = true;
23                         break;
24                     }
25                 }
26             }
27             return tempDate;
28         }
时间: 2024-12-28 20:58:18

获取截止日期,包括对节假日、补班、双休的处理的相关文章

java 获取n个工作日后的日期(包含法定节假日、双休日、节后补班)

1.说明: 获取n个工作日后的日期(包含法定节假日.双休日.节后补班),需要在数据库手动入库当年的法定节假日及节假日调休补班.(也可写在配置文件中读取) 2.工具类代码 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; /** * 用于查询n个工作日(包含法定节假日.

【技术】使用原生XHR(XMLHttpRequest)对象来获取并包括HTML片段

1. 创建文件名为“someResource”的文件(文件无后缀),文件类型:文件,在文件夹中如下图: "someResource"文件代码: <b>This is the content of resource <tt>someResource</tt></b> 2. HTML代码: <!DOCTYPE html><html>  <head>    <title>使用原生XHR来获取并包括

放春假倒逼家长带薪休假遭质疑 有人呼吁先落实双休

国务院日前印发<关于促进旅游业改革发展的若干意见>,明确将带薪年休假制度落实情况纳入各地政府议事日程,并提出中小学可安排放春假,为职工落实带薪年休假创造条件. 避开或冷或热的寒暑假.人山人海的黄金周,在和煦的春光里跟孩子来一场说走就走的带薪休假,这样的前景令不少家长向往.然而对通过春假“刺激”带薪休假落实的质疑,与“孩子放假我却请不到假”的担忧,也随之弥漫. 质疑 “用春假‘倒逼’带薪休假,是本末倒置”? 听说未来中小学有可能放春假,每年有10天年假的张旭很是兴奋.4岁的儿子还没有上学,这两年

这些网站利用起来,睡前双休时间都能赚点零花钱!

出来工作,说白了都是为了钱,什么理想,梦想,有了钱再说吧! 很多朋友做着普通的工作,拿着微薄的工资,在这个大城市摸爬滚打,发现,钱总是不够用! 有时会抱怨"为什么还不涨工资",与其这样想着,还不如在家做些兼职之类的,还能赚点外快,有人说我想啊,但是没有合适的. NO,NO,NO, 合适的兼职工作很多,只是你不知道,比如:这些网站利用起来,睡前双休时间都能赚点零花钱! 1.有道众包 网易旗下的一个平台,在这里有很多小兼职可以做:图片内容转写2元,英文英频转写2.4元,中文英频转写6元,等

安卓获取多媒体(包括 视频、音频、图片)数据

1.Android中所有的多媒体文件除了存储在物理硬盘上,还会将文件信息(路径.id.类型.)保存到数据库中,这样当我们想要获取这些文件的信息时,就不需要耗时的扫描硬盘,只需要读数据库就可以了.Android平台中称手机终端内存为内部存储空间,称SD卡为外部存储空间.针对内部和外部存储空间中的媒体文件信息是分开管理的,各自有独立的数据库管理.外部存储空间和内部存储空间对应的卷标为"external"和"internal". 2.数据库的数据都会由相应的内容提供者暴露

获取全部校园新闻(补)

1.取出一个新闻列表页的全部新闻 包装成函数. 2.获取总的新闻篇数,算出新闻总页数. 3.获取全部新闻列表页的全部新闻详情. 4.找一个自己感兴趣的主题,进行数据爬取,并进行分词分析.不能与其它同学雷同. 1-3: import requests from bs4 import BeautifulSoup from datetime import datetime import re listPageUrl = "http://news.gzcc.cn/html/xiaoyuanxinwen/

2019年端午节就这样过

以往的端午节是个看似热闹,实则冷清,且伴有一丝寂寞:感觉不到快乐,只求幸福安康:随波逐流的去看看龙船.吃个粽子,送个节:就连去旅游的那个味道也并没有想象中那么好,而且每年端午节去旅游的一部分人回家后,有感冒的.倍感疲劳,你知道为什么吗? 今天就从这四大类人群中来解读.(一) 夫妻如何过好端午节.创业者都说夫妻是人生创业的重要团队.一年16个节日中,最要重视的不是春节,也不是情人节,而是端午节.端午节对于夫妻来说,是个"危险节",也是个安康幸福节,两者过法不同而已,效果就会相差巨大.清朝

“母亲节”谈竟争、讲创业_有人泪奔,有人笑

从老爸结婚洞房花烛那夜起,你们就注定要从上亿的竟争者中脱影而出,争夺 亿分之一 的机会来到这个世界,这是一场没有硝烟的战场,勇者胜.败者亡,万万年不变的法则,人们在还没有找到妈的时候就已经开始竟争了,这是你们要干的第一仗,也是非常幸运的一仗,因为,你找到妈妈了,找到妈才有了给妈妈过"母亲节"的机会,这是过"母亲节"的第一个资格.备注:(文中的你们包括作者自己). 找到妈后,在妈的肚子里吸收妈妈的精气.营养慢慢长大,不知从什么时候开始,喜欢在妈的肚子里拳打脚踢,直到十

根据工作日/节假日收货要求计算预计发货时间

1.需求: 根据下单时间orderTime(这里默认是系统时间); 客户收货时间要求:工作日=1,节假日2; 计算预计发货时间(这里需要运输时长); 2.思路:  要计算预计发货时间,(仓库的发货截止时间是当天的16:30 ;16:30以后的当做第二天的订单) 首先计算正常情况到货时间, 例如正常情况下: 某订单是8月16号的单子, 上海-->江苏省南京市  8月16号 16:30 发货, 运输时效为17小时,预计到货时间是8月17号 9:30(周六) , 然后,根据预计到货时间开始计算出客户要