29 lines
668 B
C
29 lines
668 B
C
|
|
#include <math.h>
|
|
#define IGREG 2299161
|
|
|
|
void caldat(long julian, int *mm, int *id, int *iyyy)
|
|
{
|
|
long ja,jalpha,jb,jc,jd,je;
|
|
|
|
if (julian >= IGREG) {
|
|
jalpha=(long)(((double) (julian-1867216)-0.25)/36524.25);
|
|
ja=julian+1+jalpha-(long) (0.25*jalpha);
|
|
} else if (julian < 0) {
|
|
ja=julian+36525*(1-julian/36525);
|
|
} else
|
|
ja=julian;
|
|
jb=ja+1524;
|
|
jc=(long)(6680.0+((double) (jb-2439870)-122.1)/365.25);
|
|
jd=(long)(365*jc+(0.25*jc));
|
|
je=(long)((jb-jd)/30.6001);
|
|
*id=jb-jd-(long) (30.6001*je);
|
|
*mm=je-1;
|
|
if (*mm > 12) *mm -= 12;
|
|
*iyyy=jc-4715;
|
|
if (*mm > 2) --(*iyyy);
|
|
if (*iyyy <= 0) --(*iyyy);
|
|
if (julian < 0) *iyyy -= 100*(1-julian/36525);
|
|
}
|
|
#undef IGREG
|