www.pudn.com > 日期、菜单、字符串的C函数.rar > GTOJ.C


/*                   *** gtoj.c ***                                  */ 
/*                                                                   */ 
/* IBM - PC microsoft "C"                                            */ 
/*                                                                   */ 
/* integer function that returns the julian date (1 = 1st day AD)    */ 
/* associated with a gregorian date in the form mm/dd/yy.  Returns a */ 
/* -1 if an error occured.                                           */ 
/*                                                                   */ 
/* Written by L. Cuthbertson, March 1983.                            */ 
/*                                                                   */ 
/*********************************************************************/ 
                  
#define CENTRY 19	/* current century */ 
 
long gtoj(indate) 
char indate[]; 
{ 
	static int monthd[] = {31,28,31,30,31,30,31,31,30,31,30,31}; 
	int i; 
	int leapd,iyr,imo,iday; 
	static long cdays = 36524, ydays = 365; 
 
	/* convert into expanded format if necessary */ 
	if ((cvtdate(indate)) != 0) return(-1); 
 
	/* parse gregorian date into its pieces */ 
	sscanf(indate,"%2d%*1c%2d%*1c%2d",imo,iday,iyr); 
 
	/* adjust month array for leap year/non-leap year */ 
	if (iyr < 0 || iyr > 99) return(-1); 
	if (iyr%4 == 0 && iyr != 0 || CENTRY%4 == 0) 
		monthd[1] = 29; 
	else 
		monthd[1] = 28; 
 
	/* check for invalid month */ 
	if (imo < 1 || imo > 12) return(-1); 
 
	/* check for invalid day */ 
	if (iday < 1 || iday > monthd[imo-1]) return(-1); 
 
	/* determine the number of "extra" leap years caused by the  */ 
	/* %400 criteria and add to it the number of leap years that */ 
	/* has occured up to the prior year of current century.      */ 
	leapd = CENTRY/4; 
	if (iyr != 0) leapd += (iyr-1)/4; 
 
	/* determine number of days elapsed in current year */ 
	for (i=0;i<(imo-1);i++) 
		iday = iday + monthd[i]; 
 
	/* calculate julian date */ 
	return (CENTRY*cdays + iyr*ydays + leapd + iday); 
}