更改日期向量中的秒数

时间:2014-07-25 10:33:00

标签: matlab date

我想使用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

2 个答案:

答案 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)

其中sn的定义如上。现在你可以简单地去

v(:,end) = 30;

然后使用datestr(v)datenum(v)返回。