【问题标题】:Calculate Difference of Timestamps计算时间戳的差异
【发布时间】:2018-02-12 06:27:24
【问题描述】:

我想计算与上一行的时间差,但结果与预期不符。例如,deltatime(2,5)(见第一张截图)中的结果应该是3,而不是1317:47-17:44)。

我的代码:

% Calculate connection time
sizedate = length(date);

for i=2:sizedate
 X=char(date(i));
 X=[X(1) X(2)];

 if(X=='18')
   timenum_on=char(time(i));
   timenum_b4=char(time(i-1));
     if(timenum_on(5)<timenum_b4(5) || timenum_on(1) >=timenum_b4(1)
        timenum_on(5)=timenum_on(5)+10;
        timenum_on(4)=timenum_on(4)-1;
        deltatime(i,")=timenum_on-timenum_b4;
     else
        timenum_b4(5)=10-timenum_b4(5);
        deltatime(i,:)=timenum_on-timenum_b4;
     end

【问题讨论】:

    标签: matlab datetime time timestamp duration


    【解决方案1】:

    为什么不直接减去/区分 datetime 对象以获得 duration 对象?这是一个演示:

    function out = q48740661
    dt = datetime(2017, 02, 12, 17, 43 + (0:4).^2, 12).';
    out = flipud(diff(flipud(dt)));
    

    ans = 
    
      4×1 duration array
    
       -0:01:00
       -0:03:00
       -0:05:00
       -0:07:00
    

    【讨论】:

    • 有趣。仅供参考,日期和时间的数据日志从excel文件导入matlab。是否可以使用日期时间对象和差异数学计算?谢谢。
    • 我从未尝试过从 Excel 导入这样的数据。我不明白你的后续问题 - 请澄清。如果您在导入过程中遇到困难(即创建的 datetime 对象不包含一些重要信息) - 您应该专门为此创建一个新问题,并发布一个可用于重现的数据的小示例问题(将文件保存为 csv 然后复制粘贴到问题中)。如果您的问题是关于在 Excel 中进行类似计算 - 这应该再次在新问题的范围内讨论。
    【解决方案2】:

    尝试创建这个函数:

    deltatime=func_time(time);
    

    这个函数的内容:

    function time_diff= func_time(time_arr)
    n=size(time_arr(:,1));
    y=n(1);
    time_diff=zeros(n,n);
    for i=1:y
        for j=1:y
            time_1=time_arr(i,:); %char array of first time
            time_2=time_arr(j,:); %char array of second time
            time_cell=time_1;
            ctr=1;
            for k=1:size(time_1(:)+1)
                if(time_1(k)==':')
                    av=str2num(time_1(ctr:(k-1)));
                    bv=str2num(time_2(ctr:(k-1)));
                    time_cell(ctr:(k-1))=int2str(av-bv)
                    ctr=k+1
                end
                if(k==5)
                    av=str2num(time_1(ctr:(k)));
                    bv=str2num(time_2(ctr:(k)));
                    time_cell(ctr:k)=int2str(av-bv)
                end
            end
            time_diff(i,j)=time_cell();
        end
    end
    

    这里我假设deltatime(i,j)time(i)-time(j)

    【讨论】:

    • n=size(time_arr(:,1));
    • 这是由于我在 octave 在线运行代码的原因,它不是将我的 time_arr 作为字符串数组读取,而是作为字符矩阵读取。尽管如此,size(time_arr)=[a 7] 因为数组是 11:22:33 ; 11:23:34; ...(一次)所以,size(time_arr(:,1))=[a 1]y=n(1)=[a] 一般来说,arr(:,:) 表示遍历所有行和列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-04
    • 2020-05-13
    • 1970-01-01
    • 2019-07-21
    相关资源
    最近更新 更多