2014-03-13 130 views
2

我使用'xlsread'命令將時間序列從excel導入到matlab中的日期有問題。例如,在我的Excel電子表格中,日期/時間截至2013年12月9日09:03(2013年12月9日)的翻譯次數等於41617.37708333330。當我將它導入到matlab中時,它的序列日期號碼類型與41617.37708333330保持一致,但是當我將它轉換爲日期字符串或日期向量類型時(使用命令detester或datevec),它將轉換爲從excel導入日期到matlab

10-Dec- 0113 09:03:00或[113 12 10 9 3 0]

即一天後(10而不是9)和不同的一年(0113而不是2013)。

有人知道爲什麼是這種情況,以及如何解決它?

非常感謝您的幫助。

約翰

+1

http://www.mathworks.de/de/help/matlab/import_export/when-to -Exvert-dates-from-excel-files.html – Daniel

回答

3

Matlab的使用日期到數字會議,其中1-JAN-0000是1,和Excel使用慣例,其中1-JAN-1900是1.所以,當你在Excel的日期爲已讀一個數字,你必須將它從一個慣例轉換到另一個慣例。

如果numDate,那麼此項是從Excel中讀取的值,和你想的字符串txtDate,嘗試

txtDate=datestr(numDate+datenum('1-jan-1900')-1) 
+1

需要注意的是:Excel使用1900年1月1日和1904年1月2日兩者作爲其基準年,並且這可以在每個工作簿的基礎上進行設置。工作簿中的Date1904屬性將指出這一點。請參閱Daniel評論中的鏈接。此外,如果您擁有金融工具箱,則有一個'x2mdate'函數可以爲您進行轉換。爲了提高效率,不要在轉換表達式中放入'datenum('1-jan-1900')',你應該這樣做一次,並將其存儲在一個持久變量中,以便在遇到的每個Excel日期重用。 'datenum()'調用很昂貴,並且可能會在大量導入時受到影響。 –