使用環境: matlab 5.3
將 source code 以檔名 PerpetualCal.m 存放在 matlab的 bin目錄下
使用方式: 在 matlab 交談環境或 程式中以
n=perpetualcal(year,month) 的方式呼叫
傳回值 n=0,1,2,3,4,5,6 分別對應year年month月1日為星期五,六,日...四
並印出year年month月的月曆
說明: 曆法的規則同 DickG 但計算方式稍有不同
採直接算天數的方式
%--------------------------------------------
function f=PerpetualCal(year,month)
% input: year and month
% output: Calendar
if ( year <1 | month >12 | month<1)
disp('improper parameter(s)');
return
end
year=floor(year);
month=floor(month);
DaysofMonth=[31 28 31 30 31 30 31 31 30 31 30 31] ;
if( year >1752)
if (mod(year,4)==0 & mod(year,100)~=0)|(mod(year,400)==0)
DaysofMonth(2)=29;
end
days=1752*365.25-11;
days=days+floor((year-1752-1)*365.25)- floor(year/100)+17+floor(year/400)-4;
days=days+sum(DaysofMonth(1:month-1));
elseif (year==1752)
DaysofMonth(2)=29;
if (month >9)
days=floor(1751*365.25)+ sum(DaysofMonth(1:month-1))-11;
else
days=floor(1751*365.25)+sum(DaysofMonth(1:month-1));
end
else % year <1752
if (mod(year,4)==0) , DaysofMonth(2) =29;end
days=floor((year-1)*365.25)+sum(DaysofMonth(1:month-1));
end
days=days+1;
Day=mod(days,7)+1; % range 0~6 --> 1~7 for array index starting from 1
f=Day-1;
if( year==1752 & month==9 )
aMonth=[1 2 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30];
Length=19;
else
Length=DaysofMonth(month);
aMonth=linspace(1,DaysofMonth(month),Length);
end
Title=[' 日' ' 一' ' 二' ' 三' ' 四' ' 五' ' 六'];
disp(' ');
disp([blanks(5) num2str(year) '年' num2str(month) '月']);
disp(' ');disp(Title);
Day2Week=[5 6 0 1 2 3 4];
j=Day2Week(Day);
OneRow=blanks(j*3);
for i= 1: Length
OneElement=num2str(aMonth(i));
OneRow=[OneRow blanks(3-length(OneElement)) OneElement];
j=j+1;
if mod(j,7)==0
disp(OneRow);
OneRow='';
j=0;
end
end
disp(OneRow);
% end of function
--
※ 發信站: 批踢踢實業坊(ptt.twbbs.org)
◆ From: wind.g1.ntu.edu.tw