精華區beta C_and_CPP 關於我們 聯絡資訊
使用環境: 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