迈出第一步往往是困难的,只愿前路回首,既无风雨也无愁!
这是一份计算工作日天数、自然日天数的代码。编写的起因是前公司经常需要提交项目周期计划给销售,所以经常用到计算工作日的软件,一开始我们都是翻着日历,上网查法定假日,然后将工作日摘出来计算项目交期;后来我找到了一个网站,可以计算工作日间隔、或者根据工作日计算最终交期,于是发给边上同事使用;再后来,我就离职跑路了~
离职后的某天,一个同事找我聊天,说是之前的网站找不到了,于是便萌生了自己写一版的想法,于是乎,下面这份代码就产生了。
思路是建立一个大的数组,内部用0或1标识工作日和非工作日,然后通过给定的条件计算工作日或截止日期,没有用到结构体、指针等高级技巧,因为当时我用的不好,所以就没敢上,使用C-Free软件编写,但是我也试着把它改到VS上跑了一下,也是木有问题的~
写的灰常灰常的挫,请不小心看到的大佬轻喷~
后续有时间再更新,但愿我不会偷懒~(不可能 :)
#include <stdio.h>
#include <string.h>
#include <stddef.h>
int Year_2019_Data[]={
0,31,28,31,30,31,30,31,31,30,31,30,31};
int Year_2020_Data[]={
0,31,29,31,30,31,30,31,31,30,31,30,31};
int OutputDays = 0;//输出天数
int sumNutureDate(int year1,int month1,int day1,int year2,int month2,int day2);
void ReleaseLog(void);
void weekendInit(void);
void InsertHoliday(int write2holiday);
void InsertWorkday(int write2workday);
int sum_MONTH_DAYS(int year,int month1,int day1,int month2,int day2);
//定义每一个月初第一周的星期类型
int get_2019_week[]={
0, 0x06,0x30,0x30,0x03,0x0C,
0x60,0x03,0x18,0x41,0x06,
0x30,0x41};
int get_2020_week[]={
0, 0x0C,0x60,0x41,0x0C,0x30,
0x03,0x0C,0x60,0x06,0x18,
0x41,0x06};
int weeks2019[13][32]={
0};
int weeks2020[13][32]={
0};
int insert_holiday[] = {
20190101,//元旦
20190204,20190205,20190206,20190207,20190208,20190209,20190210,//春节
20190405,20190406,20190407,//清明
20190501,20190502,20190503,//劳动
20190607,20190608,20190609,//端午节
20190913,20190914,20190915,//中秋节
20191001,20191002,20191003,20191004,20191005,20191006,20191007,//国庆节
20200101,//元旦
20200124,20200125,20200126,20200127,20200128,20200129,20200130,20200131,20200201,20200202,//春节
20200404,20200405,20200406,//清明
20200501,20200502,20200503,20200504,20200505,//劳动节
20200625,20200626,20200627,// 端午节
20201001,20201002,20201003,20201004,20201005,20201006,20201007,20201008//国庆&中秋
};
int insert_workday[] = {
20190202,20190203,20190428,20190505,20190929,20191012,
20200105,20200119,20200426,20200509,20200628,20200927,20201010
};
//数据交换函数
void swap(int a, int b) //引用类型方式
{
int temp; //辅助变量
temp = a;
a = b;
b = temp;
}
//日期解析
int DataAnalysis(int Frist,int End)
{
int nuture_date=0;//定义返回值
int year1,month1,day1;//年月日参数,仅支持2019年1月1日-2020年12月31日
int year2,month2,day2;
year1 = Frist/10000;
month1 = (Frist/100)%100;
day1 = Frist%100;
year2 = End/10000;
month2 = (End/100)%100