3 static char daytab
[2][13] =
5 { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
6 { 0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
9 /* set day of year based on month and day */
10 int day_of_year(int year
, int month
, int day
)
14 if(year
< 1752 || month
> 12 || month
< 1 || day
< 1) { return -1; }
16 leap
= year
% 4 == 0 && year
% 100 != 0 || year
% 400 == 0;
17 if(day
> daytab
[leap
][month
]) { return -1; } // day month pair OK?
19 for( i
= 1; i
< month
; i
++)
20 day
+= daytab
[leap
][i
];
24 /* get month, day from day of year */
25 int month_day(int year
, int yearday
, int *pmonth
, int *pday
)
29 if(year
< 1752) { return -1; }
31 leap
= year
% 4 == 0 && year
% 100 != 0 || year
% 400 == 0;
32 if((leap
&& yearday
> 366) || (!leap
&& yearday
> 365)) { return -1; }
34 for(i
= 1; yearday
> daytab
[leap
][i
]; i
++)
35 yearday
-= daytab
[leap
][i
];
44 ans
= day_of_year(2009, 2, 1);
46 ans
= month_day(2009, 34, &month
, &day
);
49 printf("Day: %d\tMonth:%d\n", day
, month
);
51 int yearday
, year
= 2009;
52 int leap
= year
% 4 == 0 && year
% 100 != 0 || year
% 400 == 0;
54 for(month
= 1; month
<= 12; ++month
)
58 while(++day
<= daytab
[leap
][month
])
60 yearday
= day_of_year(year
, month
, day
);
61 printf("Y: %d\tM: %d\tD: %d\t->\tYD:%d\n", year
, month
, day
, yearday
);