| home
| contents
| previous
| next page
| send comment
| send link
| add bookmark |
testdate.cpp
/*-------------------------------------------------------------------------*
TESTDATE.CPP
tests julian day to gregorian calander date conversion used in the
timewarp utility
by: Stephen R. Schmitt
*-------------------------------------------------------------------------*/
#include <math.h>
#include <stdio.h>
/*-------------------------------------------------------------------------*
* "jul_to_greg" convert from julian day number to month/day/year
*
* returns: nothing
*/
void jul_to_greg( long n, // julian day
char *m, // month
char *d, // day
int *y ) // year with century
{
long dd; // work variable
n -= 1721118L; // base calcs on 3/1/1 BC
*y = (int)((4 * n - 1) / 146097L); // get century number
n = 4 * n - 1 - (146097L * *y); // ..remove that many days
dd = n / 4; // get to the year
n = (4 * dd + 3) / 1461; // ..within the century
*y = (int)(100 * *y + n); // ..then year with century
dd = 4 * dd + 3 - 1461 * n; // get to days within 4 yrs
dd = (dd + 4) / 4; // get days within base yr
*m = (int)(5 * dd - 3) / 153; // get month
dd = 5 * dd - 3 - (153 * *m); // get to the day ..
*d = (int)(dd + 5) / 5; // ..within the month
if( *m < 10) // need to adjust month?
*m += 3;
else
{
*m -= 9; // adjust for March base
(*y)++; // ..date and fix year too
}
return;
}
/*-------------------------------------------------------------------------*
* "julian_day" determine Julian day from calendar date
* ref: Jean Meeus, "Astronomical Algorithms", Willmann-Bell, 1991
*
* returns: nothing
*/
double julian_day( char month, char day, int year )
{
double a, b, jd;
int gregorian;
if( year < 1583 )
gregorian = 0;
else
gregorian = 1;
if( month == 1 || month == 2 )
{
year = year - 1;
month = month + 12;
}
a = floor( (double)year / 100 );
if( gregorian )
b = 2 - a + floor( a / 4 );
else
b = 0.0;
jd = floor( 365.25 * ( (double)year + 4716 ) ) +
floor( 30.6001 * ( (double)month + 1 ) ) +
(double)day + b - 1524.5;
return( jd );
}
main()
{
FILE *fp;
int i;
long julian, j; // julian date
char mon, day;
int year;
fp = fopen( "testdate.txt", "w" );
julian = 2450000L;
for( i = 0; i < 2000; i++ )
{
jul_to_greg( julian, &mon, &day, &year );
j = julian_day( mon, day, year );
fprintf( fp,
"%ld = %02d-%02d-%02d = %ld\n",
julian, mon, day, year, (long)j );
julian++;
}
fclose( fp );
}
| home
| contents
| previous
| next page
| send comment
| send link
| add bookmark |
Copyright © 2004, Stephen R. Schmitt