2011-02-18 62 views
2

我在Matlab中有一個非常長的日期字符串向量(1000000+),我想將其轉換爲序列號格式。問題是,並非每個日期字符串都是相同的格式。它們是兩種格式之一,在Matlab中使用不同格式的日期字符串

'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 

是否有更好的方法去做這件事?當存在毫秒精度時,保持這一點很重要。這樣做的意圖是,我將不得不根據不同的時間標準提取和計算與每次相關的數據的統計數據,並且我認爲如果將日期作爲數字處理,則會更容易。

回答

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 
+0

完美的作品,謝謝。 – user623808 2011-02-18 22:05:51