2011-05-04 67 views
0

我使用dtstr2dtnummx因爲那是快,但我面臨的一個問題,這個功能是生成不同datenum,或者也許我的日期格式不正確Matlab的datenum代

日期= {'2011- 03-13 23:59:59.100 '}

OUT1 = datenum(日期)

OUT2 = dtstr2dtnummx(日期,' YYYY-MM-DD HH:MM:SS.SSS')

和輸出是:

日期=

'2011-03-13 23:59:59.100' 

OUT1 =

 734575.999989583 

OUT2 =

 736281.960423495 

我不知道哪裏是錯誤

UPDATE

我找到答案,用下面的日期格式我得到相同的結果

dtstr2dtnummx(日期, 'YYYY-MM-DD HH:MM:SS.SSS')

但我不知道爲什麼這樣,因爲我跟着this教程,但我得到了錯誤的輸出,如果有人知道答案,請分享。

回答

4

datenumdtstr2dtnummx使用不同格式的字符串:datenum電話cnv2icudf到「日期格式標記到ICU的日期格式標記」轉換(見help cnv2icudf),這與dtstr2dtnummx使用。請注意,這包括交換MM的大寫和小寫(交換月份和分鐘)。換句話說,您使用datenum的文檔爲dtstr2dtnummx創建了一個格式字符串,該字符串是無證的和私密的。

爲了得到正確的格式字符串來使用,你可以叫

cnv2icudf('yyyy-mm-dd HH:MM:SS.FFF') 

導致

ANS =

YYYY-MM-DD HH:MM:SS.SSS

這非常接近您找到的解決方案。

獲得的經驗:爲什麼dtstr2dtnummx是一個私有函數 - 在你理解包裝器datenum ;-)之前不要調用它。

順便說一句,出於好奇:你真的配置你的代碼,發現datenum是一個主要的罪魁禍首?

+0

請注意,原始格式字符串「yyyy-mm-dd HH:MM:SS.SSS」是兩種格式的混合體 - 「datenum」的毫秒爲「FFF」,而對於私有函數,「SSS」爲 – 2011-05-04 11:38:00

+0

我應該提到,爲了能夠調用這些私有函數,我將它們從'C:\ Program Files \ MATLAB \ R2010b \ toolbox \ matlab \ timefun \ private \ cnv2icudf.m'複製到我的工作目錄中。 – 2011-05-04 11:44:04

+0

是的,我把那裏的dtstr2dtnummx複製到:) – 2011-05-04 13:52:43