在MATLAB中计算天数

时间:2016-01-08 15:14:47

标签: matlab

我需要在特定日期开始计算X天,但我不知道如何根据每个月的天数(例如2月28日或29日,3月31日但4月30日)来计算...)。

我知道有daysact( startDate, endDate )函数,但这样我必须尝试日期,直到达到我想要的结果,而我需要的是程序从startDate计算X天数并返回endDate。例如,如果我想从明天算起90天,我就完成了:

startDate = '8-jan-2016';
endDate = '7-apr-2016';
numDays = daysact( startDate, endDate );

但我必须尝试日期,直到函数返回90(我知道它相当简单,但最终的程序必须针对不同的天数和不同的开始日期执行此操作...)< / p>

3 个答案:

答案 0 :(得分:3)

    com.sun.glass.ui.Robot robot = com.sun.glass.ui.Application.GetApplication().createRobot();
    Pixels p  =robot.getScreenCapture(1,1,1000,1000);
    Buffer buf = p.getPixels();
    java.nio.IntBuffer intBuffer = (IntBuffer) buf;
    byte[] bytes = new byte[1001*1001];
    int i=0;
    while(buf.hasRemaining()){
        bytes[i++] = (byte) intBuffer.get();
    }
    PixelFormat<ByteBuffer> pixelFormat = PixelFormat.getByteRgbInstance();
    PixelWriter pw = canvas.getGraphicsContext2D().getPixelWriter();
    pw.setPixels(1, 1, 1000, 1000, pixelFormat, bytes, 1, 1000);

这会使用datevec将您的字符串转换为startDate = '8-jan-2016'; NumDays = 90; tmp = datevec(startDate); tmp(3)=tmp(3)+90; endDate = datestr(tmp) 的向量,因此通过将所需的天数90添加到第三个元素,您可以将90天添加到开始日期。然后使用datestr将向量转换回来,这使它再次成为可识别的日期。

根据@excaza's comment datenum执行大致相同的操作,返回自[Y M D HH MM SS]以来的天数,因此可以使用以下方法完成相同的操作:

0 January 0000

更为简洁,代价是必须将所有内容转换为几天。

因为为什么不这样做:

startDate = '8-jan-2016';
NumDays = 90;
endDate = datestr(datenum(startDate)+NumDays);

答案 1 :(得分:3)

2014b及更高版本:

datetime(2016,1,8) + days(90)
datetime(2016,1,8) + 90

datetime('today') + days(90)
datetime('today') + 90

datetime('tomorrow') + days(90)
datetime('tomorrow') + 90

答案 2 :(得分:1)

我想发布此作为替代方案。 @excaza在评论@Adriaan的答案中提到了这一点。

myDate = datenum(2016,1,8); % datenumber for january 8 2016
newDate = myDate + 90; % add 90 days
newDate2 = myDate + 2/24; % add 2 hours
newDate3 = myDate + 93/1440; % add 93 minutes

然后您可以使用datestr打印日期。

datestr(newDate)

ans =

07-Apr-2016

>> datestr(newDate2)

ans =

08-Jan-2016 02:00:00

>> datestr(newDate3)

ans =

08-Jan-2016 01:33:00

datenum可以使用许多输入甚至是用户定义的格式来读取日期字符串。