#include <stdio.h>
#include <time.h>
void today(int * year , int * month , int * day)
{
time_t T ;
struct tm * TM ;
time(& T) ;
TM = localtime(& T) ;
* year = TM -> tm_year + 1900 ;
* month = TM -> tm_mon + 1 ;
* day = TM -> tm_mday ;
}
int leapyear(int y)
{
return ((! (y % 4) && y % 100) || ! (y % 400)) ? 1 : 0 ;
}
int monthdays(int y , int m)
{
int r , md[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} ;
r = 0 ;
if(y >= 1900 && y <= 2999 && m > 0 && m < 13) {
r = md[m - 1] ;
if(leapyear(y) && m == 2) r += 1 ;
}
return r ;
}
int check(int y , int m , int d)
{
int e , r ;
r = 0 ;
if(y >= 1900 && y <= 2999 && m > 0 && m < 13 && d >= 1 && d <= monthdays(y , m)) r = 1 ;
return r ;
}
int days(int y[] , int m[] , int d[])
{
int a , b , ds ;
ds = 0 ;
if(y[1] > y[0] || (y[1] == y[0] && m[0] < m[1]) || (y[1] == y[0] && m[0] == m[1]) && d[0] <= d[1]) {
if(y[0] == y[1] && m[0] == m[1]) {
ds = d[1] - d[0] ;
} else if(y[0] == y[1]) {
ds = monthdays(y[0] , m[0]) - d[0] ;
for(b = m[0] + 1 ; b < m[1] ; b ++) ds += monthdays(y[0] , b) ;
ds += d[1] ;
} else {
ds = monthdays(y[0] , m[0]) - d[0] ;
for(b = m[0] + 1 ; b < 13 ; b ++) ds += monthdays(y[0] , b) ;
for(a = y[0] + 1 ; a < y[1] ; a ++) ds += (leapyear(a)) ? 366 : 365 ;
for(b = 1 ; b < m[1] ; b ++) ds += monthdays(y[1] , b) ;
ds += d[1] ;
}
}
return ds + 1 ;
}
int years(int y[] , int m[] , int d[])
{
int ys , a ;
ys = 0 ;
if(y[1] > y[0]) {
ys = y[1] - y[0] ;
if(m[0] > m[1] || (m[0] == m[1] && d[0] > d[1])) ys -- ;
}
return ys ;
}
int main(void)
{
int y[2] , m[2] , d[2] ;
today(& y[1] , & m[1] , & d[1]) ;
printf("今天是 : %4d-%02d-%02d\n" , y[1] , m[1] , d[1]) ;
printf("输入您的出生日期 (y-m-d) : ") ;
scanf("%d-%d-%d" , & y[0] , & m[0] , & d[0]) ;
if(check(y[0] , m[0] , d[0]) && (y[0] < y[1] || (y[0] == y[1] && m[0] < m[1]) || (y[0] == y[1] && m[0] == m[1] && d[0] <= d[1]))) {
printf("今天是阁下生命中的第 【%5d】 天!\n" , days(y , m , d)) ;
if(m[1] == m[0] && d[1] == d[0]) {
printf(" 今天是阁下 【%2d】 周岁的生辰!\n" , years(y , m , d)) ;
printf(" 祝阁下生日快乐!\n") ;
} else {
printf(" 阁下已经 【%2d】 周岁了!\n" , years(y , m , d)) ;
}
} else {
printf("日期输入错误!") ;
}
}