Matlab创建时间序列,闰年判断,月平均

创建时间序列

datetime格式

t1=datetime(2009,1,1,0,0,0); %[年 月 日 时 分 秒]向量构建
t2=datetime(2016,12,31,23,45,0);
t=t1:minutes(15):t2; % minutes 间隔时间,可以替换为days hours 等
t=t';
t_c=datetime(t,'format','MM/dd/yyyy HH:mm'); % 'MM/dd/yyyy HH:mm'你需要输出的形式,基本实现自由组会

可以转成你需要的数据格式

闰年判断

y_t=1951:2017;
a=366; % 代表闰年
b=365; % 代表平年 
c=48; % 每天几个数据,48 是半小时数据 如果是天的话就是1
% 读取闰年平年
for i=1:length(y_t)
    if mod(y_t(i),4)==0
        y_num(i,1)=a.*c;
    else y_num(i,1)=b.*c;
    end
end
% 读取多年每年,比如2000年是366天 多年日序列的第yy_num(2000-y_t(1)+1,1):yy_num(2000-y_t(1)+1,2)
for i=2:length(y_num)
    yy_num(i,1)=sum(y_num(1:i-1))+1;
    yy_num(i,2)=sum(y_num(1:i));
end
yy_num(1,1)=1;
yy_num(1,2)=y_num(1,1);

做月平均

month_pp 大小是12×2,第一列是一年之中每个月开始的日数,第二列是结束的日序(升级版,写成了函数,可以选择是否需要考虑闰年,如果不考虑闰年就是闰年没有2月29日)

function [month_pp] = monln(sd,ed,cal)
%MONLN 本函数的作用是,求两个时间阶段之间的每个月份的取值,具体用于月平均
%   sd 开始的年月 sd=[yr months];
%   ed 结束的年月 ed=[yr months];
%   cal 是否考虑闰年 cal=1 不考虑闰年 cal=0 考虑闰年
%   gggggg
month_p(1,:)=[31 28 31 30 31 30 31 31 30 31 30 31];
month_p(2,:)=[31 29 31 30 31 30 31 31 30 31 30 31];
y_n=ed(1,1)-sd(1,1)+1;
if y_n==1
    if mod(sd(1,1),4)==0
        month_a=month_p(2-cal,sd(1,2):ed(1,2));
    else
        month_a=month_p(1,sd(1,2):ed(1,2));
    end
else 
    for y=1:y_n
        if mod(sd(1,1)-1+y,4)==0
            month_all(1+(y-1)*12:12*y)=month_p(2-cal,:);
        else
            month_all(1+(y-1)*12:12*y)=month_p(1,:);
        end
    end
    month_a=month_all(1,sd(1,2):end-12+ed(1,2));
end
    for i=2:length(month_a)
        month_pp(i,1)=sum(month_a(1:i-1))+1;
        month_pp(i,2)=sum(month_a(1:i));
    end
    month_pp(1,1)=1;month_pp(1,2)=month_a(1,1);
end
  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值