【问题标题】:How to create a dates series that gives me only the end of the month days? [closed]如何创建一个只给我月末天数的日期系列? [关闭]
【发布时间】:2013-11-27 12:26:53
【问题描述】:

我如何创建一个仅给出月末天数的日期系列? 即

31/01/1993
28/02/1993
...
31/01/2013

【问题讨论】:

    标签: matlab date series


    【解决方案1】:

    简单的方法是使用月初天数并减去一个。所以,例如:

    datevec(datenum(1993,2,1)-1);
    

    这会给你1993 01 31。然后为接下来的每个月做同样的事情是相当简单的。例如

    datenum(1993,2:13,1)-1;
    

    会给你整个 1993 年的月末天数。

    编辑:

    正如 Luis 指出的那样,如果您希望将日期作为格式化字符串,就像在原始问题中一样,您可以使用 datestr:

    % The '24' causes datestr to use a predefined format of the form 'dd/mm/yyyy'
    datestr(datenum(1993,2:13,1)-1,24)
    

    EDIT2:

    要做多年,你可以增加月数。 MATLAB 的 datenum 函数很聪明 - 如果你给它一个日期 datenum(1993,14,1) 它会返回 1994/2/1,所以如果你想要从 1993-2013 的每个月(20 年,所以 240 个月)你会使用

    datestr(datenum(1993,2:241,1)-1,24)
    

    【讨论】:

    • +1 表示“-1”的想法可以得到上个月的最后一天!
    • 要获得 OP 的预期结果,请结合 datestr 格式为 23:datestr(datenum(1993,2:13,1)-1,23)
    • 好点,我修改了我的答案以反映这一点。
    • 谢谢。小修正:对于“dd/mm/yyyy”,您需要 24。23 给出美国格式。
    • 问题:多年来我是怎么做到的?我试过 BB=datestr(datenum(1993:2013,2:13,1)-1,24);但只给我每年的 1 月 31 日。
    【解决方案2】:

    使用日历功能:

    for year = 1993:2013
        for month = 1:12
            lastday = max(max(calendar(year,month)));
            fprintf('%02d/%02d/%04d\n',lastday,month,year)
        end
    end
    

    您当然可以通过将 fprintf 更改为 sprintf 来将结果存储在矩阵(或元胞数组)中:

    dates = char(zeros(12*21,10));
    idx = 0;
    for year = 1993:2013
        for month = 1:12
            idx = idx + 1;
            lastday = max(max(calendar(year,month)));
            dates(idx,:) = sprintf('%02d/%02d/%04d',lastday,month,year);
        end
    end
    

    ---编辑---

    我发现还有eomday 功能。所以代替线:

    lastday = max(max(calendar(year,month)));
    

    你可以使用:

    lastday = eomday(year,month);
    

    在MATLAB中查看eomday函数类型的算法:

    open eomday
    

    【讨论】:

    • 问题:多年来我是怎么做到的?我试过 BB=datestr(datenum(1993:2013,2:13,1)-1,24);但只给我每年的 1 月 31 日
    • 你可以这样使用datenum:datestr(datenum(1993,2:(12*20+2),1)-1,24)——表示你提供年份和月数您想要的日期。
    猜你喜欢
    • 2020-05-29
    • 1970-01-01
    • 2015-02-03
    • 2022-01-01
    • 2012-03-19
    • 1970-01-01
    • 2010-11-25
    • 2010-09-12
    • 2018-04-14
    相关资源
    最近更新 更多