如何在Matlab中创建5分钟的时间步长文件名?

时间:2016-04-08 18:37:19

标签: matlab

我有开始和结束时间

startTime = 12-Jun-2011 00:00:00
endTime = 13-Jun-2011 1:45:00

我希望每隔五分钟创建一个文件名来存储在数组中:

RATE.20110612.000000.tif
RATE.20110612.000500.tif
RATE.20110612.001000.tif
RATE.20110612.001500.tif
.
.
.
RATE.20110613.014000.tif
RATE.20110613.014500.tif

到目前为止,我正在这样做:

endTime = datenum('13-Jun-2011 1:45:00');
startTime = datenum('12-Jun-2011 00:00:00');
minSteps =int8(((endTime-startTime)*24*60)/5) %Number of 5 minute steps between start and end time

for k = 1:minSteps
   FileNames{k} = strcat('RATE.',datestr(startTime, 'yyyymmdd.hhMMss'), '.tif');
   startTime = addtodate(startTime, 5, 'minute');
end

但这不起作用。我该怎么做?步数计算也是错误的。

2 个答案:

答案 0 :(得分:2)

来自int8的文档:

  

值范围从-2 7 到2 7 - 1.

最大值为127

在您的示例中,您的最大值为309

startTime = datenum('12-Jun-2011 00:00:00');
endTime = datenum('13-Jun-2011 1:45:00');
minSteps = ((endTime-startTime)*24*60)/5

minSteps =

  309.0000

因此,尝试将minSteps重新转换为int8将返回最大值127

重新转换为具有更高限制的整数类(int16int32int64uint16uint32uint64)或者根本不打算重整为整数而只是围绕minStepsfloorceilround)。除非您特别需要将minSteps作为整数,否则重新制作它并不重要,它不会影响循环中k的值。

答案 1 :(得分:2)

为什么不通过使用for对象来避免duration循环和计算,并创建datetime(s)的向量?

startTime = datetime('12-Jun-2011 00:00:00');
endTime = datetime('13-Jun-2011 1:45:00');
dt = duration(0,5,0); % 5 min interval

% Get vector of datetime values in the interval
timeVec = startTime:dt:endTime;

% print datetime values in required format
fileIds = cellstr(datestr(timeVec,'yyyymmdd.HHMMSS')); 
fileNames = strcat(repmat({'RATE.'},numel(fileIds),1),fileIds,repmat({'.tif'},numel(fileIds),1));

>> fileNames

fileNames = 

'RATE.20110612.000000.tif'
'RATE.20110612.000500.tif'
'RATE.20110612.001000.tif'
'RATE.20110612.001500.tif'
....
'RATE.20110613.013500.tif'
'RATE.20110613.014000.tif'
'RATE.20110613.014500.tif'