Date de conversion de POSIXct à ce Jour dans la R
quelqu'un peut me dire pourquoi la R donner un tel résultat ci-dessous:
> as.POSIXct("2013-01-01 08:00")
[1] "2013-01-01 08:00:00 HKT"
> as.Date(as.POSIXct("2013-01-01 08:00"))
[1] "2013-01-01"
> as.POSIXct("2013-01-01 07:00")
[1] "2013-01-01 07:00:00 HKT"
> as.Date(as.POSIXct("2013-01-01 07:00"))
[1] "2012-12-31"
Ne devrait-elle pas être 2013-01-01
après la conversion de POSIXct
à Date
pour 2013-01-01 07:00
, est-il possible de modifier la fréquence de coupure de 08:00
à 00:00
?
Mise à jour #1
J'ai trouvé le suivant peut résoudre mon problème, mais de moins en moins la façon soignée
> as.Date(as.character(as.POSIXct("2013-01-01 07:00")))
[1] "2013-01-01"
Vous devez vous connecter pour publier un commentaire.
Le problème ici est de fuseaux horaires - vous pouvez voir que vous êtes dans
"HKT"
. Essayez:De
?as.Date()
:Utiliser le temps de la zone paramètre de
as.Date
:En fait, je recommande toujours à l'aide de la
tz
paramètre lors de l'utilisation de la date-heure de fonctions de conversion. Il y a d'autres mauvaises surprises, par exemple avec l'heure d'été.POSIXct
à tout prix.as.POSIXct
), pas le vert coché la réponse par l'OP.Ce qui se passe comme documenté et expliqué précédemment, lorsque contemporaines de l'heure UTC est avant (troisième exemple) ou après minuit sur votre POSIXct date. Pour voir les maths pour vous-même, inspecter " comme.Date.POSIXct " à la console. Les mathématiques sous la valeur par défaut tz="UTC", est claire. Non dans le cas par défaut, R essentiellement des appels.Date.POSIXlt, et la "date de voyage" ne se produit pas. En fait, si vous aviez commencé avec le "lt" objet vous n'auriez pas eu ce problème:
La méthode la plus simple de contourner cette difficulté est de les appeler comme.Date avec tz="" de la force en utilisant le moins d'infractions.Date.POSIXlt algorithme: