2017-03-17 223 views
0

當我嘗試使用openxlsx從xlsx文件讀取日期時遇到了問題。我已經嘗試過xlsx和xlconnect軟件包,但他們在我的計算機上都有Java錯誤,所以我使用openxlsx。使用openxlsx從xlsx文件中讀取日期後,將數字轉換爲日期和時間

我的最新數據是這樣的:

1/01/2015 0:30 
1/01/2015 1:00 
1/01/2015 1:30 
1/01/2015 2:00 
1/01/2015 2:30 
1/01/2015 3:00 
1/01/2015 3:30 
1/01/2015 4:00 
1/01/2015 4:30 
1/01/2015 5:00 

我用下面的代碼讀取數據:

a <- read.xlsx(paste0(myPath,"try/",myFileNameList[i]),startRow = 2,sheet = 1) 

然後,我將數據保存爲CSV文件。在此csv文件,日期如下:

42005.02083 
42005.04167 
42005.0625 
42005.08333 
42005.10417 
42005.125 
42005.14583 
42005.16667 
42005.1875 
42005.20833 

類是數字。所以,這些數字應該對應於上面的日期。如何將數字數據轉換回日期和時間?

的數據樣本是:

a <- c(42005.02083,42005.04167,42005.06250,42005.08333,42005.10417,42005.12500,42005.14583,42005.16667,42005.18750,42005.20833) 

回答

3

他們是天與分數日以來1899-12-30:

as.POSIXct("1899-12-30") + as.difftime(a, units="days") 
# [1] "2015-01-01 00:29:59 AEST" "2015-01-01 01:00:00 AEST" "2015-01-01 01:30:00 AEST" 
# [4] "2015-01-01 01:59:59 AEST" "2015-01-01 02:30:00 AEST" "2015-01-01 03:00:00 AEST" 
# [7] "2015-01-01 03:29:59 AEST" "2015-01-01 04:00:00 AEST" "2015-01-01 04:30:00 AEST" 
#[10] "2015-01-01 04:59:59 AEST" 

獲取想要的結果(在默認情況下,本地時區),除了一些非常小的舍入誤差與保存和重新加載時的精度損失相關。

+0

非常感謝!但我無法複製你的答案。我在墨爾本。我的數據涉及悉尼,墨爾本和澳大利亞所有州。當我運行時:as.POSIXct(a,origin =「1899-12-30」,tz =「Australia/Brisbane」)+ as.difftime(a,units =「days」)。結果如下:[1]「2015-01-01 22:10:04 AEST」「2015-01-01 22:40:05 AEST」「2015-01-01 23:10:05 AEST」...當我使用「澳大利亞/墨爾本」等其他tzs時,我有不同的結果。你能解釋一下給我嗎?謝謝。 –

+0

@FengChen - 因爲你沒有使用我寫的代碼:'as.POSIXct(a,origin =「1899-12-30」)''和'as.POSIXct(「1899-12-30」)'不是同樣的事情。 – thelatemail

+0

明白了。非常感謝! –

相關問題