// // Convert Gregorian date and time to fractional Modified Julian Date (MJD) // // MJD 0 is 1858-11-17 // MJD 51544 is 2000-01-01 // MJD 99999 is 2132-08-31 // // 26-Nov-2005 /tvb // #include #include #include long calc_mjd (long year, long month, long day); void main (int argc, char *argv[]) { double fmjd; long mjd; time_t t; struct tm *tm; int year, month, day, hour, minute, second; time(&t); tm = gmtime(&t); year = (argc > 1) ? atoi(argv[1]) : 1900 + tm->tm_year; month = (argc > 2) ? atoi(argv[2]) : 1 + tm->tm_mon; day = (argc > 3) ? atoi(argv[3]) : tm->tm_mday; hour = (argc > 4) ? atoi(argv[4]) : tm->tm_hour; minute = (argc > 5) ? atoi(argv[5]) : tm->tm_min; second = (argc > 6) ? atoi(argv[6]) : tm->tm_sec; mjd = calc_mjd(year, month, day); fmjd = mjd + ((((hour * 60) + minute) * 60) + second) / 86400.0; printf("UTC %.4d-%.2d-%.2d %.2d:%.2d:%.2d = MJD %.6lf\n", year, month, day, hour, minute, second, fmjd); } // Convert Gregorian date to Modified Julian Date (MJD) long calc_mjd (long year, long month, long day) { if (month < 3) { if (month == 2) { day += 1; } month += 12; year -= 1; } day += (year * 365) + (year / 4) - (year / 100) + (year / 400); day += (489 * month) / 16; return day - 678973; }