2014-07-09 24 views
1

我想使用matlab從netCDF文件讀取時間座標數據。我有一個netCDF文件(我創建的),它有一個時間變量,格式爲double,對應於特定時間的小時數(見下文)。是否有一種簡單的方法使用time-attribute從netcdf文件讀取整數時間數據?

變量屬性:

double time(Time) ; 
      time:standard_name = "Time" ; 
      time:units = "hours since 2002-01-01 0:0:0" ; 
      time:calendar = "proleptic_gregorian" ; 

當我讀取使用ncread時間變量)到MATLAB,它僅僅打印出的整數例如,1。但是,如果我使用「ncdump」來瀏覽文件,我會看到時間變量在它的座標時間,例如,2002-01-01 01.

具體來說:「ncdump -t -v time ncfile.nc」

我對matlab相對來說比較新,我想知道是否有人知道是否有類似的或者同樣簡單的方法來讀取這個時間變量作爲座標時間到matlab中,不管是作爲字符串,還是數值日期。具體來說,我想避免必須解析屬性字符串並編寫一堆指針和條件來將整數數據轉換爲實際日期。

另外,我應該只在這些文件中創建一個新的時間變量,這只是日期數組作爲字符串?

任何信息非常感謝! 謝謝!

回答

2

NetCDF存儲時間與epoch的偏移量。從您的變量屬性中,您的時期爲2002-01-01 0:0:0,時間從那時起爲幾個小時。 Matlab有一個類似的方法稱爲日期數字,儘管它基於一個時代以來的日子(他們稱之爲數年)。有兩個功能,你應該看看:datenum和datestr。第一個將字符串轉換爲日期編號,另一個將日期編號轉換爲日期字符串。

您可以將時間變量轉換爲兼容的Matlab日期數除以24,然後使用datestr函數對其進行格式化,只要您喜歡。這裏有一個簡單的例子:

>> time = [1;2;3;4]; 
>> datestr(time./24+datenum('2002-01-01 0:0:0')) 
ans = 
01-Jan-2002 01:00:00 
01-Jan-2002 02:00:00 
01-Jan-2002 03:00:00 
01-Jan-2002 04:00:00 

看看與兩個函數相關的Matlab幫助文件,你可以格式化日期輸出,不過你喜歡。

相關問題