【Matlab】把一年中的某一天(从1月1日起)换算成日期

Doy2Date函数:

% Doy2Date: 把一年中的某一天(从1月1日起)换算成日期
% [month_of_doy, day_of_doy] = Doy2Date(year, doy)
% 输入
% year         : doy对应的年份
% doy          : 一年中的第几天(从1月1日起)
% 输出
% month_of_doy : doy对应的月
% day_of_doy   : doy对应的日

% 算法思想:先判断闰年和平年,闰年2月29天,平年2月28天.
%          每月天数依次累加,直到大于等于doy,即为doy所在月
%          doy减去当前月份之前完整月份的天数就是当前月中的第几天.

% author : TSC
% time   : 2016-12-17
% email  : 292936085#qq.com(将#替换为@)

function [month_of_doy, day_of_doy] = Doy2Date(year, doy)
month1  = 31;
month3  = 31;
month5  = 31;
month7  = 31;
month8  = 31;
month10 = 31;
month12 = 31;
month4  = 30;
month6  = 30;
month9  = 30;
month11 = 30;

% 先判断闰年和平年
% 非整百年数除以4,无余为闰年,整百年数除以400,无余为闰
if (0 ~= mod(year, 100) && 0 == mod(year, 4)) || 0 == mod(year, 400) 
    month2 = 29;
else
    month2 = 28;
end

% 合并所有月份
month_merge = [];
for imonth = 1 : 12
    month_merge = [month_merge, eval(strcat('month', num2str(imonth)))];
end

for imonth = 1 : 12
    if doy < 1
        disp('doy的正确范围应该为1到365/366(平年365,闰年366)');
        month_of_doy = NaN;
        day_of_doy   = NaN;
        break;
    end
    % 每月天数依次累加,直到大于等于doy,i即为doy所在月
    if sum(month_merge(1:imonth)) >= doy             
        month_of_doy = imonth;
        days_before  = sum(month_merge(1:imonth-1));
        % doy减去当前月份之前完整月份的天数就是当前月中的第几天.
        day_of_doy   = doy - days_before;            
        break;
    elseif 12 == imonth
        disp('doy的正确范围应该为1到365/366(平年365,闰年366)');
        month_of_doy = NaN;
        day_of_doy   = NaN;
        break;
    end
end

测试函数:

year = 2015;
doy  = 365;
[month_of_doy, day_of_doy] = Doy2Date(year, doy)

注:未完全测试。

转载于:https://www.cnblogs.com/shanchuan/p/8150317.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值