获取截止日期,包括对节假日、补班、双休的处理
2015-11-27 17:56
441 查看
话说月光族的小明申请办了一张信用卡,银行规定,在受理成功后10个工作日(假设正常双休不上班)之后将可领取信用卡。tags:小明的本次办卡业务将在那天完成?
分析需求:根据受理日期,由10个工作日这个限制条件,计算出截止日期即可,其中需要对正常双休,国家法定节假日,补班等情况进行处理。
解决方案:
1、创建表存放国家法定节假日和补班的日期数据。(国家每年都会发布新的假期数据)。
2、根据开始时间和有效工作日2个输入条件,输出截止日期。
代码段:
判断是否法定补班:
判断是否为节假日放假:
分析需求:根据受理日期,由10个工作日这个限制条件,计算出截止日期即可,其中需要对正常双休,国家法定节假日,补班等情况进行处理。
解决方案:
1、创建表存放国家法定节假日和补班的日期数据。(国家每年都会发布新的假期数据)。
2、根据开始时间和有效工作日2个输入条件,输出截止日期。
代码段:
/// <summary> /// 根据开始时间和有效工作日,计算得出截止日期,包括对节假日、补班、双休的处理 /// </summary> /// <param name="dt">办理日期</param> /// <param name="workDay">多少工作日</param> /// <returns></returns> public DateTime CalculateEndDate(DateTime dt, int workDay) { DateTime tempDate = dt; while (workDay-- > 1) { //①判断是否是法定节假日 bool hoilday = false; tempDate = IsHoilday(tempDate, ref hoilday); if (hoilday) continue; //②判断是否是双休和补班 if (tempDate.DayOfWeek == DayOfWeek.Saturday || tempDate.DayOfWeek == DayOfWeek.Sunday) { tempDate = IsWeeked(tempDate); continue; } //最后一天为周末,需要往后一个工作日推 if (workDay == 0 && (tempDate.DayOfWeek == DayOfWeek.Saturday || tempDate.DayOfWeek == DayOfWeek.Sunday)) { tempDate = IsWeeked(tempDate.AddDays(1)); } } return new DateTime(tempDate.Year,tempDate.Month,tempDate.Day,23,59,59); }
判断是否法定补班:
/// <summary> /// 检查是否为法定补班 /// </summary> /// <param name="dt">日期</param> /// <returns></returns> private DateTime IsWeeked(DateTime dt) { bool isWorkday = false; DateTime tempDate = dt; bool result = OracleServiceFactory.LoadService<IHoildayService>().IsHoilday(tempDate, ENUM_节假日类型.补班); if (!result) { while (!isWorkday) { tempDate = tempDate.AddDays(1); result = OracleServiceFactory.LoadService<IHoildayService>().IsHoilday(tempDate, ENUM_节假日类型.补班); if (!result) { tempDate = tempDate.AddDays(1); isWorkday = true; break; } } } return tempDate; }
判断是否为节假日放假:
/// <summary> /// 判断是否为节假日放假 /// </summary> /// <param name="dt">日期</param> /// <param name="isHoilday">初始化</param> /// <returns></returns> private DateTime IsHoilday(DateTime dt, ref bool isHoilday) { DateTime tempDate = dt; bool result = OracleServiceFactory.LoadService<IHoildayService>().IsHoilday(tempDate, ENUM_节假日类型.法定节假日); if (!result) tempDate = tempDate.AddDays(1); //正常上班日 else { //是节假日 while (!isHoilday)//往前推,直到不是节假日为止 { tempDate = tempDate.AddDays(1); result = OracleServiceFactory.LoadService<IHoildayService>().IsHoilday(tempDate, ENUM_节假日类型.法定节假日); if (!result) { isHoilday = true; break; } } } return tempDate; }
相关文章推荐
- Docker容器资源管理
- Java synchronized详解
- 第一行代码总结:10网络:10.4解析JSON格式数据10.4.1使用JSONObject
- Android ndk 入门5 - opencv实现
- 使用Enterprise Architect 设计数据库
- iOS开发 - 处理不等高TableViewCell的招术
- Sencha Touch入门:Sencha Touch开发环境搭建及使用 Sencha Cmd 自动创建项目框架
- zzuoj 10409 10409: D.引水工程
- Samba文件共享服务器搭建
- 第一行代码总结:10网络:10.3.2 SAX解析方式
- iOS开发 音频播放、录音、视频播放、拍照、视频录制
- RPG Maker MV之如何创建NPC
- 为什么接口中变量要用final修饰
- android开发一个定位和轨迹播放的程序
- UML类图几种关系的总结
- 第一行代码总结:10网络:10.3解析XML格式数据:
- Java大数处理
- 关于ServerSocketChannel支持的最大连接数测试与分析
- lightoj 1080 Binary Simulation (线段树区间更新)
- Android ShareSdk 微信分享的步骤