2017-03-17 4 views
0

J'ai un problème lorsque j'essaie de lire la date d'un fichier xlsx en utilisant openxlsx. J'ai déjà essayé les paquets xlsx et xlconnect, mais ils ont tous les deux quelque chose de mal avec Java sur mon ordinateur, donc j'utilise openxlsx.Convertir numérique en date et heure après avoir lu la date du fichier xlsx en utilisant openxlsx

Mes données de date est comme:

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 

J'utilise le code suivant pour lire les données:

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

Ensuite, j'enregistrer les données dans un fichier csv. Dans ce fichier csv, la date ressemble à ceci:

42005.02083 
42005.04167 
42005.0625 
42005.08333 
42005.10417 
42005.125 
42005.14583 
42005.16667 
42005.1875 
42005.20833 

La classe est numérique. Donc, ces chiffres devraient correspondre à la date ci-dessus. Comment puis-je convertir les données numériques en date et heure?

L'échantillon de données est:

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

Répondre

3

Ils sont des jours et des jours fractionnaires depuis 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" 

Obtient le résultat escompté (dans votre fuseau horaire local par défaut), sauf pour une très petite erreur d'arrondi associée à la perte de précision lors de la sauvegarde et du rechargement.

+0

Merci beaucoup! Mais je ne peux pas reproduire votre réponse. Je suis à Melbourne. Et mes données concernent Sydney, Melbourne et tous les états d'Australie. Quand je cours: as.POSIXct (a, origin = "1899-12-30", tz = "Australie/Brisbane") + as.difftime (a, units = "jours"). Le résultat est comme: [1] "2015-01-01 22:10:04 AEST" "2015-01-01 22:40:05 AEST" "2015-01-01 23:10:05 AEST" ... Quand j'utilise d'autres tz comme "Australia/Melbourne", j'ai des résultats différents. Pourriez-vous m'expliquer cela? Merci. –

+0

@FengChen - Parce que vous n'avez pas utilisé le code, j'ai écrit: 'as.POSIXct (a, origine =" 1899-12-30 ")' et 'as.POSIXct (" 1899-12-30 ")' ne sont pas la même chose du tout. – thelatemail

+0

J'ai compris. Merci beaucoup! –