我想使用Matlab在我的时间向量中保持秒数均匀。
例如在我的数据中,时间向量是
01-01-2007 14:18:30; 01-01-2007 14:19:30;01-01-2007 14:20:38;01-01-2007 14:21:28
等等.. 我希望它保持统一
01-01-2007 14:18:30; 01-01-2007 14:19:30;01-01-2007 14:20:30;01-01-2007 14:21:30.
非常感谢任何帮助 谢谢。 S.S
答案 0 :(得分:1)
在数据字符串中,最后一个秒始终是字符串中的最后两个位置,因此您可以使用以下命令替换它们:
date_string='01-01-2007 14:18:28';
uni_seconds = '30';
date_string(end-1:end)=uni_seconds
最后一行指出最后两个地方(end-1和end)将被变量uni_seconds替换,这是包含你想要设置的秒数的字符串。
答案 1 :(得分:1)
所以这取决于您的日期存储方式
作为字符串数组:
s = ['01-01-2007 14:18:30';
'01-01-2007 14:19:30';
'01-01-2007 14:20:38';
'01-01-2007 14:21:28']
s(:,end-1:end)= repmat('30', size(s,1),1)
或者如果由于某种原因你不想使用repmat
(这可能会更快),你可以利用Matlab自动广播标量的事实:
s(:,end-1)='3';
s(:,end)= '0';
或字符串数组:
c = {'01-01-2007 14:18:30';
'01-01-2007 14:19:30';
'01-01-2007 14:20:38';
'01-01-2007 14:21:28'}
cellfun(@(x)([x(1:end-2),'30']), c, 'uni', false)
或者如果您的日期为数字,那么
s = ['01-01-2007 14:18:30';
'01-01-2007 14:19:30';
'01-01-2007 14:20:38';
'01-01-2007 14:21:28']
n = datenum(s, 'dd-mm-yyyy HH:MM:SS')
%// Note that n will store numbers in units of days, so to round off to the nearest 30 seconds we must round to multiples of 1/(# of 30 seconds per day)
k = 2*60*24; %//The number of 30 seconds per day
round(n*k)/k
或其中任何一个,您都可以转换为日期向量:
v = datevec(s, 'dd-mm-yyyy HH:MM:SS')
或
v = datevec(n)
其中s
或n
的定义如上。现在你可以简单地去
v(:,end) = 30;
然后使用datestr(v)
或datenum(v)
返回。