matlab闰年,基于MATLAB的万年历计算

基于MATLAB的万年历计算

黄小川(200431610102)

测绘工程专业2004级9班

摘要:运用MATLAB编程实现1936—2032年农历与公历间的相互转换,并求当日是星期几。

关键词:万年历 公历转化为农历 农历转化为公历 求当天是星期几

正文:

1. 概述:知道公历年月日求农历日期,知道农历年月日求公历日期,并求当日是星期几。

2. 相关知识及原理:

公历:公历是现在国际通用的历法,又称格列历,通称阳历。公历将一年分为十二个月,其中一、三、五、七、八、十、十二月有31天,俗称“大月”;四、六、九、十一月有30天;平年二月有28天,闰年二月有29天,这样公历闰年一年有366天,平年有365天。

公历闰年:若一年年数不能被4整除,或能被100整除但不能被400整除,则称这一年为平年,否则为闰年。

农历:农历是基于对地球公转和月相变化的观测的。我国现采用的农历结合了阳历与阴历(伊斯兰历)的记年方法:一年有十二个月,其中6个大月(30天),6个小月(29天),一个农历年有354天。

农历闰月:为了平衡公里年与农历年的天数差别,农历采用在适当时候设立闰月的方法,一般三年左右设一闰月,闰月可以是大月,也可以是小月。具体设置原则由节气而定,方法较为复杂。

公历与农历间的转换:公历是纯数学的记年法,而农历是基于观测结果之上的。两者见的转换比较复杂,无法用简单的数学公式表示。因此,这里采用的方法是首先查得1936年至2032年相关的资料,包括:该年农历大年初一到公历元旦的天数、该年农历各月的天数、该年农历有无闰月以及在何处闰月。这样在公历化为农历时,只需算得改日距该年农历大年初一的天数,对应该年农历各月的天数,即可得到农历的月份,及该日在该农历月是第几天;在农历化为公历时,同样,需算得该日距该年元旦的天数,通过类似转化,即可求得公历日期。

求星期数:已知公历求星期数时,计算出改日距一特定日期的天数,则该日星期数=特定日期星期数+距离天数除以7的余数;已知农历时,只需将农历转换为公历,再由公历日期求星期数即可。

3. 实例计算:

3.1数据说明:

runyear 36到该年的闰年数

gongli_year %公历年数

gongli_mongth %公历月数

gongli_day %公历日期

gongli_sumofdays %公历各月累积天数

gongli_daysofyear %该日是该公历年的第几天

nongli_year %农历年数

nongli_month %农历月数

nongli_day %农历日期

nongli_sumofdays %农历各月累积天数

nongli_daysofyear %该日是该农历年的第几天

3.2MATLAB源程序:

%getdayofweek.m

%由公历日期求星期数

runyear=floor((gongli_year-1933)/4); %到1936年的闰年数

weekday=rem((gongli_year-1936-runyear)*365+runyear*366

+gongli_sumofdays(gongli_month)+gongli_day,7)+1; %求星期数

weekdayoutput=['二','三','四','五','六','日','一'];

fprintf('这一天是星期%s,',weekdayoutput(weekday))

%gongli_input

%输入公历日期

gongli_year=input('请输入一公历个年份:');

while (gongli_year-1936)*(gongli_year-2032)>0; %输入年份不符合要求

gongli_year=input('猪头!年份应在1936至2032之间,请再输一次:');

end

gongli_month=input('请输入一个公历月份:');

while (gongli_month-1)*(gongli_month-12)>0 %输入月份不符合要求

gongli_month=input('猪头!月份应在1至12之间,请再输一次:');

end

sign=0; %判断是否是闰年

if rem(gongli_year,4)==0

sign=sign+1;

end

if sign==1

gongli_sumofdays=[0,31,60,91,121,152,182,213,244,274,305,335,366];

else

gongli_sumofdays=[0,31,59,90,120,151,181,212,243,273,304,334,365];

end

gongli_day=input('请输入一个公历日期:');

while

(gongli_day-1)*(gongli_day-(gongli_sumofdays(gongli_month+1)

-gongli_sumofdays(gongli_month)))>0

gongli_day=input('猪头!这个月没有这个日期,请再输一次:');

end

%gongli2gongli.m

%将公历日期转化为农历日期

gongli_daysofyear&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值