我在Matlab中有一个很长的日期字符串向量(1000000+),我希望将其转换为序列号格式。问题是并非每个日期字符串都是相同的格式。它们是两种格式之一,
'2010-03-04 12:00:00.1'
或
'2010-03-04 12:00:00'
问题是并非所有字符串都具有毫秒精度。关于这些没有毫秒的字符串的出现位置没有规则的模式。数据最初是从数据文件中读取的,并且字符串当前作为单元阵列存在。我的工作如下:
for i=1:length(dates),
if length(dates{i})==19
dates(i)=datenum(temp);
elseif length(dates{i})==21
dates(i)=datenum(temp,'yyyy-mm-dd HH:MM:SS.FFF');
end
end
或许有更好的方法可以解决这个问题吗?重要的是,当它存在时,我保持毫秒级的精度。这样做的目的是我必须根据不同的时间标准提取和计算与每次相关的数据的统计数据,并且我认为如果将日期作为数字处理会更容易。
答案 0 :(得分:3)
在MATLAB R2010b中,我可以在调用DATENUM时获得所需的输出,而无需其他格式参数:
>> dateStrs = {'2010-03-04 12:00:00.1'; ... %# Sample strings
'2010-03-04 12:00:00'};
>> datenum(dateStrs)
ans =
1.0e+005 *
7.3420 %# The same? No, the Command Window just isn't displaying
7.3420 %# many places after the decimal point.
>> format long %# Let's make it show more decimal places
>> datenum(dateStrs)
ans =
1.0e+005 *
7.342015000011574 %# And there's the difference!
7.342015000000000