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


/*                   *** jtoj.c ***                                  */ 
/*                                                                   */ 
/* IBM - PC microsoft "C"                                            */ 
/*                                                                   */ 
/* integer function that returns the julian date (1 = 1st day AD)    */ 
/* associated with the julian date in the form (yddd).  Returns a -1 */ 
/* if an error occured.                                              */ 
/*                                                                   */ 
/* Written by L. Cuthbertson, March 1983.                            */ 
/*                                                                   */ 
/*********************************************************************/ 
                  
#define CENTRY 19	/* current century */ 
#define DECADE 80	/* current decade */ 
 
long jtoj(jin) 
char jin[]; 
{ 
	static int monthd[] = {31,28,31,30,31,30,31,31,30,31,30,31}; 
	int i; 
	int leapd,iyr,idays; 
	static long cdays = 36524, ydays = 365; 
 
	/* parse input julian date into its pieces */ 
	sscanf(jin,"%1d%3d",iyr,idays); 
 
	/* calculate year */ 
	iyr += DECADE; 
	if (iyr < 0 || iyr > 99) return(-1); 
 
	/* check for invalid number of days */ 
	if (idays < 1) 
		return(-1); 
 
	if ((iyr%4 == 0) && ((iyr != 0) || (CENTRY%4 == 0))) { 
		if (idays > (ydays+1)) 
			return(-1); 
	} else { 
		if (idays > ydays) 
			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; 
 
	/* calculate julian date */ 
	return (CENTRY*cdays + iyr*ydays + leapd + idays); 
}