如何用matlab实现某年某月某日是星期几 我知道我编的程序已病入膏肓了、、求帮忙修改

function xingqi=f(x,y,z)
clc
x1=[ 31 59 90 120 151 181 212 243 273 304 334 365]; %平年前N月天数和
x2=[ 31 60 91 121 152 182 213 244 274 305 335 366];%闰年前N月天数和
x=[2000:1:2100];%2000到2100年
a=( mod(x,400)==0 | mod(x,100)~=0 & mod(x,4)==0);%a=1闰年,a=0平年
sum(a);%2000年到x年共几个闰年
if
a==0&y~=1 %平年不是一月
sum=365*(x-2000)+x1(y-1)+z+sum(a); %总天数
elseif a==0&y=1 %平年是一月
sum=365*(x-2000)+z+sum(a); %总天数
elseif a==1&y==1 %闰年一月
sum=365*(x-2000)+z+sum(a)-1; %总天数
else sum=365*(x-2000)+x2(y-1)+z+sum(a)-1;%闰年不是一月
xingqi=mod(sum+6,7);
end

function xingqi=day1234567(year,month,day)
%year:年,month:月,day:日,本函数可以算出这个日期是星期几
% 例如: day1234567(2013,10,22)
% 以2000年,1月1日为星期六为基点,前后都可以计算

%平年时1到12月份的前一个月的累计天数,[0 31 28 31 30 31 30 31 31 30 31 30]*triu(ones(12))
yue=[0,31, ...% 一月,二月的前一个月的累计天数
[59,90,120,151,181,212,243,273,304,334]+ ...% 本行会根据本年的闰年或非闰年+1或+0;加号必须在此行,不能在下一行,否则错
(mod(year,4)==0 & mod(year,100)~=0 | mod(year,400)==0)]; % 0是平年,1 是闰年 ;因为计算优先级的原因,注意加括号
run=year-(year>2000)-2000;% 意义见下面的***
xingqi=mod( ...
year-2000 ... %差的年数乘以365天:365*(x-2000) mod 7 = (x-2000) mod 7
... %***大于2000年时,闰年数从2000年算到前一年;小于等于2000年时,闰年数绝对值从本年算到2000年,但不包括2000年这个闰年***
+ fix(run/4)-fix(run/100)+fix(run/400)+(year>2000) ... %闰年数的代数值,包括正负号
+ yue(month) ... %从年初到前一个月的整月天数
+ day ... %本月的天数
-1+6-1,7)+1;% 减1号,加星期6,向前错位1,让星期1模7后变为0,...星期7模7后变为6,之后再向后错位1,变为星期1到星期7
end
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-22

不知道你只是想要这个功能,还是想自己写个算法来练习下,如果是前者,就不要重复造轮子了。Matlab早已提供了内置函数。

假设x, y, z分别表示年、月、日,则求星期几函数如下:

[index,d] = weekday(datenum([x y z]))

其中index表示是一周的第几天,d则是星期几的英文表示

如:

 [index,d] = weekday(datenum([2013 10 22]))
 index =

     3
  d =

  Tue

追问

刚开始接触matlab、、想自己练习练习、、编好程序不能运行、、希望能够帮忙改正一下我的原程序

相似回答