首页 > 代码库 > 日期计算

日期计算

有一个很方便的公式用来计算日期对应的星期数

技术分享

 

技术分享

技术分享

技术分享
 1 #include <iostream>
 2 #include <string.h>
 3 #include <stdlib.h>
 4 #include <stdio.h>
 5 using namespace std;
 6 
 7 int month_day[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
 8 int daytime=0;
 9 int total=0;
10 int is_leap_year(int y)
11 {
12     if(y%400==0||(y%4==0&&y%100!=0)) return 1;
13     else return 0;
14 }
15 int main()
16 {
17     int y,m,d,k;
18     cin>>y>>m>>d>>k;
19     total=d+k;
20 
21     if(m==2)
22     {
23         month_day[1]+=is_leap_year(y);
24     }
25     while(total>month_day[m-1])
26     {
27         total-=month_day[m-1];
28         m++;
29         if(m==2)
30         {
31             month_day[1]+=is_leap_year(y);
32         }
33         if(m==13)
34         {
35             m=1;
36             y++;
37             month_day[1]=28;
38         }
39     }
40 
41     cout<<y<<"-";
42     if(m<10)
43     {
44         cout<<"0"<<m<<"-";
45     }
46     else
47     {
48         cout<<m<<"-";
49     }
50     if(total<10)
51     {
52         cout<<"0"<<total;
53     }
54     else
55     {
56         cout<<total;
57     }
58     cout<<endl;
59 
60     return 0;
61 }
View Code

 

技术分享

技术分享

技术分享

技术分享

写得有点乱,脑子混乱。。。

技术分享
  1 #include <iostream>
  2 #include <string.h>
  3 #include <stdlib.h>
  4 #include <stdio.h>
  5 using namespace std;
  6 int getW(int y,int m,int d)
  7 {
  8     if(m==1)
  9     {
 10         m=13;
 11         y--;
 12     }
 13     if(m==2)
 14     {
 15         m=14;
 16         y--;
 17     }
 18     return (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7;
 19 }
 20 int month_day[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
 21 int is_leap_year(int y)
 22 {
 23     if(y%400==0||(y%4==0&&y%100!=0)) return 1;
 24     else return 0;
 25 }
 26 int main()
 27 {
 28     int y,arr[8][2],total=365,countt=12,de=0;
 29     int m,d,w;
 30     cin>>y;
 31     month_day[1]+=is_leap_year(y);
 32     total+=is_leap_year(y);
 33     for(int i=1; i<=4; i++)
 34     {
 35         cin>>m>>d;
 36         if(i==1)
 37         {
 38             if(getW(y,m,d)==5||getW(y,m,d)==6)
 39             {
 40                 de++;
 41             }
 42             if(d<month_day[m-1])
 43             {
 44                 if(getW(y,m,d+1)==5||getW(y,m,d+1)==6)
 45                 {
 46                     de++;
 47                 }
 48                 if(d+1<month_day[m-1])
 49                 {
 50                     if(getW(y,m,d+2)==5||getW(y,m,d+2)==6)
 51                     {
 52                         de++;
 53                     }
 54                     else
 55                     {
 56                         if(getW(y,m+1,1)==5||getW(y,m+1,1)==6)
 57                         {
 58                             de++;
 59                         }
 60                     }
 61                 }
 62             }
 63             else
 64             {
 65                 if(getW(y,m+1,1)==5||getW(y,m+1,1)==6)
 66                 {
 67                     de++;
 68                 }
 69                 if(getW(y,m+1,2)==5||getW(y,m+1,2)==6)
 70                 {
 71                     de++;
 72                 }
 73             }
 74         }
 75         else
 76         {
 77             if(getW(y,m,d)==5||getW(y,m,d)==6)
 78             {
 79                 de++;
 80             }
 81         }
 82     }
 83     if(getW(y,1,1)==5||getW(y,1,1)==6)
 84     {
 85         de++;
 86     }
 87     if(getW(y,5,1)==5||getW(y,5,1)==6)
 88     {
 89         de++;
 90     }
 91     if(getW(y,10,1)==5||getW(y,10,1)==6)
 92     {
 93         de++;
 94     }
 95     if(getW(y,10,2)==5||getW(y,10,2)==6)
 96     {
 97         de++;
 98     }
 99     if(getW(y,10,3)==5||getW(y,10,3)==6)
100     {
101         de++;
102     }
103     if(getW(y,12,25)==5||getW(y,12,25)==6)
104     {
105         de++;
106     }
107     cin>>w;
108     int day=1;
109     //计算双休
110     while(w<=7)
111     {
112         if(w==6||w==7)
113         {
114             countt++;
115         }
116         w++;
117         day++;
118     }
119     while(day+7<=total)
120     {
121         day+=7;
122         countt+=2;
123     }
124     if(total-day==5)
125     {
126         countt++;
127     }
128     if(total-day==6)
129     {
130         countt+=2;
131     }
132     //双休+放假-重合天数
133     cout<<countt-de<<endl;
134     return 0;
135 }
View Code

 

日期计算