Question

Je veux soustraire 1 jour à partir d'une date de fin et Posix en même temps autour de l'heure d'été.

Par exemple, quand j'ajoute un jour:

> as.POSIXct('2009-03-08 23:00:00.000') + 86400
[1] "2009-03-09 23:00:00 EDT"

Mais quand je passe devant, il compense:

> as.POSIXct('2009-03-08 23:00:00.000') - 86400
[1] "2009-03-07 22:00:00 EST"

Quelle est la meilleure façon de traiter les différences de temps absolu autour de l'heure d'été? En général, je traite en convertissant les temps en chaînes et de traiter séparément de sorte que l'heure d'été est pas appliquée.

Était-ce utile?

La solution

Votre code est en train de faire exactement ce que vous avez demandé de faire, parce que vous ne demandez pas à ajouter ou soustraire un jour, vous avez demandé à ajouter ou soustraire 24 heures . 24 heures (86400 secondes) avant 2009-03-08 23:00:00 EDT 2009-03-07 22:00:00 EST. Je ne suis pas familier avec les bibliothèques de R, mais je suis familier avec les fonctions POSIX qu'ils enveloppent. Si vous prenez un POSIXct, diminuer sa propriété day par 1, puis « refondue » à POSIXct via POSIXlt (pour faire en sorte que par exemple -1er Février devient 31 Janvier), alors vous devriez être en mesure de soustraire de manière fiable un jour.

Autres conseils

datetimes Stocker comme UTC - ou dans ce cas à convertir UTC soustraient par jour et reconvertir en heure locale. (Cela ne tient pas compte des secondes intercalaires)

Merci hobbs! Je dois faire un peu plus de travail avec elle, mais en soustrayant de la fente de jour fonctionne dans POSIXlt:

> a <- as.POSIXct('2009-03-08 23:00:00.000')
> as.POSIXlt(a)
[1] "2009-03-08 23:00:00 EDT"
> a <- as.POSIXlt(a)
> a$mday <- a$mday -1
> a
[1] "2009-03-07 23:00:00 EDT"

Si vous voulez juste compter les jours, vous pouvez utiliser trunc pour se déplacer le jour juste:

> trunc(Sys.time(), "day") + 86400
[1] "2009-09-13 PDT"
> trunc(Sys.time(), "day") - 86400
[1] "2009-09-11 PDT"

Le lubridate paquet fournit deux classes de TimeSpan supplémentaires qui précisent ce qui est un peu clair dans le package de base. De tha manuel:

Durées

Durées mesurer la quantité exacte de temps qui se produit entre deux instants. Cela peut créer des résultats inattendus par rapport aux temps d'horloge si un saut deuxième, année bissextile, ou changement de l'heure d'été (DST) se produit dans l'intervalle.

Périodes

Les périodes mesurent la variation dans le temps de l'horloge qui se produit entre deux instants. Les périodes fournissent des prévisions robustes de temps d'horloge en présence de secondes bissextiles, les années bissextiles, et les changements dans l'heure d'été.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top