"Failed on converting date string to date number"由于时间戳格式的混合



以某种方式我的原始数据的时间戳是

A= 
{'12/5/2015 11:59:58 PM';
'13/5/2015'; % ideally this is '13/5/2015 12:00 AM'
'13/5/2015 12:00:01 AM;
'13/5/2015 12:00:01 AM}

由于混合,我无法执行datenum,

datenum(A,'dd/mm/yyyy HH:MM:SS PM')给了我"将日期字符串转换为日期编号失败"

如何转换A(混合 timeFormat)中的所有实体,转换为时间编号系列?

为了找到使用特定格式的索引,您可以使用正则表达式。
以较长的格式并将其匹配到您的A

longformat = '^dd/(1?)d/dddd dd:dd:dd [AP]M$';
found = regexp(A,longformat) 
ans = 
    [1]
    []
    [1]
    [1]

因此,您可以使用匿名函数之类的东西找到找到哪些答案:

foundlong = @(A,expr) cellfun(@(x) ~isempty(x),regexp(A,expr));
found = foundlong(A,longformat)
found =
     1
     0
     1
     1

现在您有了可以在其中使用datenum()与特定格式使用的索引。例如:

d(found) = datenum(A{found},'dd/mm/yyyy HH:MM:SS AM');

注意:如果从较短的表达式开始,则说

shortformat = '^dd/(1?)d/dddd'; 

您将匹配它们的所有。因此,请确保在序列$的末尾添加,以匹配字符串的末端:

shortformat = '^dd/(1?)d/dddd$'; 

最新更新