我有开始和结束时间
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
但这不起作用。我该怎么做?步数计算也是错误的。
答案 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
。
重新转换为具有更高限制的整数类(int16
,int32
,int64
,uint16
,uint32
,uint64
)或者根本不打算重整为整数而只是围绕minSteps
(floor
,ceil
,round
)。除非您特别需要将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'