快速将datetime转换为字符串的方法

时间:2016-03-15 20:15:05

标签: string matlab datetime

我想知道是否有更快的方法将日期时间转换为t = datetime('now'); DateString = datestr(t); 以外的字符串。

datetime插入到我的main函数中的每隔一行(包括它的所有依赖项)。我需要时间在那行代码执行。

我认为我唯一的选择是将datetime转换为字符串更快。

{{1}}

我描述了它似乎被称为12570846次。它总共需要16030.021秒。

我这样做的目的是获取执行该行的当前时间,并与我从其他程序获取的带有时间戳的其他信息相匹配。我匹配两个文件(一个来自这个MATLAB代码,一个来自我的其他程序)和时间戳。

2 个答案:

答案 0 :(得分:4)

您可以这样做的一种方法是将当前时间与上一次循环时间进行比较。您只应重新计算datestring值,如果它不同的话。但我们实际上可以更进一步,因为datestr的输出(因为你正在调用它)只显示秒。所以我们实际上可以忽略微秒差异。

使用now(~128秒)

的示例

下面我有一个缓存日期字符串表示的示例循环。它将序列日期(以秒为单位)与生成最后一个日期字符串的日期进行比较。只有不同的是日期字符串更新。

% Number of seconds in a day to convert the serial date number
secperday = 60 * 60 * 24;

% Store the current time as a reference
lasttime = now;
datestring = datestr(lasttime);

for k = 1:12570846
    N = now;
    seconds = round(N * secperday);

    if ~isequal(lasttime, seconds)
    % Update the cache
        lasttime = seconds;
        datestring = datestr(N);
    end

    % Use datestring however you want
    disp(datestring)
end

使用clock(~24秒)

的示例

另一种选择是使用clock,它将为您提供向量中的不同日期组件。您可以舍入表示秒和毫秒的最后一个元素。通过舍入它可以抑制毫秒数。这种方法似乎是一种更快的方法。

N = clock;

% Remove milliseconds
N(end) = round(N(end));
lasttime = N;
datestring = datestr(N);

for k = 1:12570846
    N = clock;
    % Ignore milliseconds
    N(end) = round(N(end));

    if ~isequal(N, lasttime)
        lasttime = N;
        datestring = datestr(N);
    end

    disp(datestring)
end

基于功能的解决方案

如果你想在代码中的几个点上将当前时间作为日期字符串,那么创建一个包含此功能的函数可能要好得多。这是一个这样的功能的例子。

function str = getDateString()
    % Use persistent variables to cache the current value
    persistent lasttime datestring

    % Get the current time
    thistime = clock;

    % Truncate the milliseconds
    thistime(end) = floor(thistime(end));

    % See if the time has changed since the last time we called this
    if ~isequal(thistime, lasttime)
        lasttime = thistime;

        % Update the cached string reprsentation
        datestring = datestr(thistime);
    end

    str = datestring;
end

然后,您可以在代码中的任何位置调用此方法来获取日期字符串,并且只会在必要时进行计算。

答案 1 :(得分:0)

如果你的循环时间非常短,那么如果它足够接近,你可以每隔10个循环或类似的东西转换日期时间。