void mjd2cal(double utc,int& year,int& mon ,int& day,int& hour,int& min,double& sec)
{
if(utc>2400000.5){
utc = utc - 2400000.5;
}
int i,j,k,l,idy;
double sfrac;
idy = (int)utc - 33282;
i = (4000*(idy + 18204))/1461001;
j = idy - (1461 * i)/ 4 + 18234;
k = 80 * j/2447;
l = k/11;
year = 1900+l+i;
mon = k+2-12*l;
day = j-(2447*k)/80;
sfrac = (double)(utc-int(utc))*24.0;
hour = (int)sfrac;
sfrac = (sfrac -(double)hour) *60.0;
min=(int)sfrac;
sec = (sfrac-(double)min)*60;
return;
}
结果验证: int year=0,mon=0,day=0,hour=0,min=0;
double sec=0;
double utc= 59539.5;
mjd2cal(utc,year,mon,day,hour,min,sec);
qDebug()<<year<<mon<<day<<hour<<min<<sec;
结果: 2021 11 21 12 0 0