感谢CSDN大佬的分享【https://blog.csdn.net/qq_41696018/article/details/119647098】,原文是C++编写的,我在这里改成matlab。
function out_yd = wzq_ymd2yd(year,month,day)
%% convert year-month-day to days in year
% modified from: https://blog.csdn.net/qq_41696018/article/details/119647098
doy = 0;
days_in_month = [31,28,31,30,31,30,31,31,30,31,30,31];
if(mod(year,4)==0 && (mod(year,100)~=0 || mod(year,400)==0))
days_in_month(2)=29;
end
for i = 1:month-1
doy = doy +days_in_month(i);
end
out_yd = doy+day;
end
2.年积日转年月日
function [year,month,day] = wzq_yd2ymd(year,doy)
%% convert days in year to year-month-day
% modified from: https://blog.csdn.net/qq_41696018/article/details/119647098
days_in_month = [31,28,31,30,31,30,31,31,30,31,30,31];
if(mod(year,4)==0 && (mod(year,100)~=0 || mod(year,400)==0))
days_in_month(2)=29;
end
id = doy;
month = 0;
day = 0;
for i = 1:12
id = id - days_in_month(i);
month = i;
if(id>0)
continue
end
day = id + days_in_month(i);
break
end
end
3.年积日转简化儒略日
function [year,month,day] = wzq_yd2ymd(year,doy)
%% convert days in year to year-month-day
% modified from: https://blog.csdn.net/qq_41696018/article/details/119647098
days_in_month = [31,28,31,30,31,30,31,31,30,31,30,31];
if(mod(year,4)==0 && (mod(year,100)~=0 || mod(year,400)==0))
days_in_month(2)=29;
end
id = doy;
month = 0;
day = 0;
for i = 1:12
id = id - days_in_month(i);
month = i;
if(id>0)
continue
end
day = id + days_in_month(i);
break
end
end
4.简化儒略日转年积日
function [year,doy] = wzq_mjd2yd(mjd)
%% ucas@Chistrong Wen
% 2022-10-17
days = [366,365,365,365];
mjd52 = 34012;
doy = mjd+1-mjd52;
i = 1;
year = 52;
while(doy>days(i))
doy = doy-days(i);
year = year+1;
i = mod(year,4)+1;
end
if(year<1900)
if(year>60)
year = year +1900;
else
year = year +2000;
end
end
end
5.简化儒略日转GPS周
function [week,weekd] = mjd2gpsweek(mjd)
week = (mjd-44244)/7;
weekd = mjd-44244-week*7;
end
6.GPS周转简化儒略日
function mjd = gpsweek2mjd(week,weekd)
mjd = week*7+44244+weekd;
end
希望对大家有所帮助!