2016-12-19 1 views
1

J'essaie de soustraire une heure (3600 s) de cet objet de temps défini comme 01:00. Quand je le fais, le composant temps disparaît, et il ne me reste plus que la date. J'ai besoin de préserver la composante temps - comment puis-je le faire? Cela n'arrive que lorsque le résultat de ma soustraction est 00-00.Temps de suppression en soustrayant de l'objet POSIXlt

test <- strptime("2016-09-02_01-00", format = "%Y-%m-%d_%H-%M", tz = "UTC") 
test 
[1] "2016-09-02 01:00:00 UTC" 
test-3600 
[1] "2016-09-02 UTC" 
+2

La composante temps est toujours là , il ne suffit pas d'imprimer avec toutes les dates dans un vecteur ont le temps minuit. Si vous souhaitez appliquer un format à afficher, utilisez 'strftime()' ou 'format()' ou quelque chose comme ça. – MrFlick

+1

Cela est également documenté sous '? Strptime'" * La valeur par défaut pour les méthodes de format est "% Y-% m-% d% H:% M:% S" si un élément a un composant de temps qui n'est pas minuit, et " % Y-% m-% d "sinon *" –

Répondre

3

Ceci est une différence entre le contenu et la représentation.

fmt <- "%Y-%m-%d_%H-%M" 
test <- strptime("2016-09-02_01-00", 
    format = fmt, tz = "UTC") 
str(test) 
## POSIXlt[1:1], format: "2016-09-02 01:00:00" 

Soustraire 3600 -t changer la structure (de POSIXlt à POSIXct) ...

str(test-3600) 
## POSIXct[1:1], format: "2016-09-02" 

... mais le changement de formatage est juste en raison de R essayer d'être utile et de l'impression la représentation la plus simple disponible. L'information de temps n'a pas réellement disparu. De ?strptime (grâce @DavidArenburg):

La valeur par défaut pour les méthodes de format est "% Y-% m-% d% H:% M:% S" si un élément a une composante de temps qui ne soit pas minuit et "% Y-% m-% d" ailleurs

Comme les États @MrFlick dans les commentaires, vous pouvez remplacer en spécifiant une chaîne de format ...

fmt2 <- "%Y-%m-%d %H:%M:%S" 
format(test-3600,fmt2) 
## [1] "2016-09-02 00:00:00" 
+0

Excellent. Merci pour la clarification. Cela répond. – SilvanD