JD ymd2jd(YMD ymd) { JD jd; int m, y; y = ymdGetYear(ymd); m = ymdGetMonth(ymd); /* normalize the month */ if (m < 1) { y -= (1 - m) / 12; m = (m % 12) + 12; } if (m > 12) { y += (m - 1) / 12; m = ((m - 1) % 12) + 1; } jdSetDay(jd, gcal2j(y, m, 0)); jdIncDay(jd, ymdGetDay(ymd)); /* now the fractional day... */ jd.hms = ymd.hms; /* julian days start 12 hours after civil days */ jdDecHours(jd, 12.0); return(jd); }
char * fmt_ymd(YMD ymd) { char *p; double j; /* julian day number of target time */ int fpart; int ipart; int today; /* get a buffer */ p = ymdbuf[nxtymdbuf++]; nxtymdbuf %= NYMDBUF; /* normalize the time */ ymd = ymd2ymd(ymd); /* get the julian day number */ j = ymd2j(ymd); /* get the day of the week */ today = j2dow(j); ipart = (int)ymdGetSeconds(ymd); fpart = 1e3 * (ymdGetSeconds(ymd) - ipart); (void)sprintf(p, "%3.3s %3.3s %2d %02d:%02d:%02d.%03d %4d", dow[today], moy[ymdGetMonth(ymd)-1], (int)ymdGetDay(ymd), (int)ymdGetHours(ymd), (int)ymdGetMinutes(ymd), ipart, fpart, ((ymdGetYear(ymd) > 0) ? ymdGetYear(ymd) : (1-ymdGetYear(ymd)))); if (ymdGetYear(ymd) <= 0) { (void)strcat(p, " BC"); } return(p); }
int main(){ YMD ymd; #define L 4 double y[L][2] = { {1858.0, 321.0}, {1949.0, 365.9234590}, {2000.0, 1.5}, {1984.0, 1.0} }; for(int i=0; i < L; i++){ printf("%4d %12.7f\n", (int)y[i][0], y[i][1]); ymd = ydd2ymd((int)y[i][0], y[i][1]); printf("%4d %2d %10.6f %10.6f %10.6f %10.6f\n", ymdGetYear(ymd), ymdGetMonth(ymd), ymdGetDay(ymd), ymdGetHours(ymd), ymdGetMinutes(ymd), ymdGetSeconds(ymd)); } return 0; }
int main(){ YMD ymd; double t = 0.0; #define L 9 double y[L][6] = { {1858.0, 11.0, 17.0, 0.0, 0.0, 0.0}, {1949.0, 12.0, 31.923459, 0.0, 0.0, 0.0}, {2000.0, 1.0, 1.0, 0.0, 0.0, 0.0}, {1984.0, 1.0, 1.0, 0.0, 0.0, 0.0}, {1984.0, 1.0, 0.0, 0.0, 0.0, 0.0}, {1984.0, 12.0, 31.0, 23.0, 59.0, 60.0}, {1985.0, 1.0, 1.0, 0.0, 0.0, 0.0}, {1985.0, 1.0, 0.0, 0.0, 0.0, 0.0}, {1985.0, 12.0, 31.0, 23.0, 59.0, 60.0} }; for(int i=0; i < L; i++){ ymdSetYear(ymd, (int)y[i][0]); ymdSetMonth(ymd, (int)y[i][1]); ymdSetDay(ymd, y[i][2]); ymdSetHours(ymd, y[i][3]); ymdSetMinutes(ymd, y[i][4]); ymdSetSeconds(ymd, y[i][5]); printf("%4d %2d %10.6f %10.6f %10.6f %10.6f\n", ymdGetYear(ymd), ymdGetMonth(ymd), ymdGetDay(ymd), ymdGetHours(ymd), ymdGetMinutes(ymd), ymdGetSeconds(ymd)); t = ymd2y(ymd); printf("%13.8f\n\n", t); } return 0; }