45 lines
		
	
	
		
			817 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			817 B
		
	
	
	
		
			C
		
	
	
	
	
	
#include "tai.h"
 | 
						|
#include "caldate.h"
 | 
						|
 | 
						|
static unsigned long times365[4] = { 0, 365, 730, 1095 } ;
 | 
						|
static unsigned long times36524[4] = { 0, 36524UL, 73048UL, 109572UL } ;
 | 
						|
static unsigned long montab[12] =
 | 
						|
{ 0, 31, 61, 92, 122, 153, 184, 214, 245, 275, 306, 337 } ;
 | 
						|
/* month length after february is (306 * m + 5) / 10 */
 | 
						|
 | 
						|
long caldate_mjd(struct caldate *cd)
 | 
						|
{
 | 
						|
  long y;
 | 
						|
  long m;
 | 
						|
  long d;
 | 
						|
 | 
						|
  d = cd->day - 678882L;
 | 
						|
  m = cd->month - 1;
 | 
						|
  y = cd->year;
 | 
						|
 | 
						|
  d += 146097L * (y / 400);
 | 
						|
  y %= 400;
 | 
						|
 | 
						|
  if (m >= 2) m -= 2; else { m += 10; --y; }
 | 
						|
 | 
						|
  y += (m / 12);
 | 
						|
  m %= 12;
 | 
						|
  if (m < 0) { m += 12; --y; }
 | 
						|
 | 
						|
  d += montab[m];
 | 
						|
 | 
						|
  d += 146097L * (y / 400);
 | 
						|
  y %= 400;
 | 
						|
  if (y < 0) { y += 400; d -= 146097L; }
 | 
						|
 | 
						|
  d += times365[y & 3];
 | 
						|
  y >>= 2;
 | 
						|
 | 
						|
  d += 1461L * (y % 25);
 | 
						|
  y /= 25;
 | 
						|
 | 
						|
  d += times36524[y & 3];
 | 
						|
 | 
						|
  return d;
 | 
						|
}
 |