我想知道是否有更快的方法将日期时间转换为t = datetime('now');
DateString = datestr(t);
以外的字符串。
datetime插入到我的main函数中的每隔一行(包括它的所有依赖项)。我需要时间在那行代码执行。
我认为我唯一的选择是将datetime转换为字符串更快。
{{1}}
我描述了它似乎被称为12570846次。它总共需要16030.021秒。
我这样做的目的是获取执行该行的当前时间,并与我从其他程序获取的带有时间戳的其他信息相匹配。我匹配两个文件(一个来自这个MATLAB代码,一个来自我的其他程序)和时间戳。
答案 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个循环或类似的东西转换日期时间。