convertir difftime temps en années, mois et jours
Comment puis-je convertir avec précision les produits (unités est en jours) de la difftime
ci-dessous pour les années, les mois et les jours?
difftime(Sys.time(),"1931-04-10")
difftime(Sys.time(),"2012-04-10")
Cela fait des années et des jours, mais comment pourrais-je inclure mois?
yd.conv<-function(days, print=TRUE){
x<-days*0.00273790700698851
x2<-floor(x)
x3<-x-x2
x4<-floor(x3*365.25)
if (print) cat(x2,"years &",x4,"days\n")
invisible(c(x2, x4))
}
yd.conv(difftime(Sys.time(),"1931-04-10"))
yd.conv(difftime(Sys.time(),"2012-04-10"))
Je ne suis pas sûr de la façon de définir mois. Voudrais 4 semaines être considéré comme un mois ou au passage de ce même mois, jour. Donc, pour la définition d'un mois si la date initiale a été 2012-01-10 et le courant 2012-05-31 nous aurions 0 ans, 5 mois et 21 jours. Cela fonctionne bien, mais que faire si la date initiale était le 31 de ce mois et la date de fin était sur 28 fév cela serait-il considéré comme un mois?
Comme je l'ai écrit à cette question, la question elle-même a évolué donc je ferais mieux de préciser:
Quel serait le meilleur (le plus logique) à la définition des mois et puis, comment trouver diff temps en années, en mois et en jours?
OriginalL'auteur Tyler Rinker | 2012-05-31
Vous devez vous connecter pour publier un commentaire.
Si vous êtes en train de faire quelque chose comme
Il s'agit comme le sous-entend que vous devez savoir ce que someDate est. Dans ce cas, vous pouvez convertir cette POSIXct de la classe de l'objet qui vous donne la possibilité d'extraire des informations temporelles directement (paquet chron propose plusieurs méthodes, trop). Par exemple
Ce sera le retour de votre date souhaitée objet. Si vous avez un fuseau horaire tz pour alimenter difftime, vous pouvez aussi passer directement à la tz paramètre.POSIXct.
Maintenant que vous avez votre date d'objet, vous pouvez exécuter des choses comme
months(.)
et si vous avez chron vous pouvez faireyears(.)
etdays(.)
(renvoie commandé facteur).À partir d'ici, vous pourriez faire plus de maths simples sur la différence d'années, de mois et de jours séparément (conversion au numérique des représentations). Bien sûr, convertir someDate à POSIXct sera nécessaire.
EDIT: À la réflexion,
months(.)
renvoie une représentation de caractère du mois, qui peut ne pas être efficace. Au moins, il va me falloir un peu de traitement (pas trop difficile) pour donner une représentation numérique.Aussi, lorsque vous traitez avec les dates et les heures, une bonne règle à suivre est la suivante: si vous n'êtes intéressé avec les dates, l'utilisation d'un Jour de classe de l'objet. Si vous êtes préoccupé par le temps, mais pas les détails (par exemple, le fuseau horaire), chron objet de classe. Sinon, vous voulez tous les détails, afin de l'utiliser POSIXlt ou POSIXct (l'ancien est stockée sous forme de liste). Les méthodes ont tendance à travailler sur tous ces objets.
OriginalL'auteur Bryan Goodrich
Vous ne pouvez pas simplement de convertir un difftime mois, depuis la définition de mois dépend du temps absolu au cours de laquelle le difftime a commencé.
Vous aurez besoin de connaître la date de début ou la date de fin de dire avec exactitude le nombre de mois.
Vous pourriez, par exemple, calculer le nombre de mois de la première année de votre laps de temps, le nombre de mois dans le dernier votre de la plage de temps, et d'ajouter le nombre d'années entre le times 12.
OriginalL'auteur mic_e
Hmm. Je pense que le plus judicieux serait de regarder les différentes unités elles-mêmes. Afin de comparer le jour du premier mois, puis de comparer les mois de l'année, puis de comparer l'année. À chaque point, vous pouvez introduire un report pour éviter les valeurs négatives.
En d'autres termes, ne pas travailler avec le produit de difftime, mais recode votre propre difftime.
difftime
prend en compte les années bissextiles.mais comme les deux answerers allusion aux, en affichant
# years # months # days
perd de l'exactitude de toute façon. Alors pourquoi ne pas simplement prendre qui frappe et ne bruts de maths sur les dates à l'aide d'un customdifftime
fonction? Puisque vous êtes déjà de perdre un peu de précision, vous pourriez faire quelque chose comme le nombre moyen de jours dans un mois et juste ajouter que cette partie de votre fonction actuelle.Je pense qu'il est plus intuitif de toute façon, comme par exemple le 1/1/2012 et 1/1/2013 donner une différence de un an exactement, que de donner le résultat de 1 an et 1 jour, ou pire, 1 an et 0,25 jours.
OriginalL'auteur Fhnuzoag
R n'a pas mis en œuvre ces fonctionnalités de l'ignorance.
difftime
objets sont transitives. A 700 jours de différence, en tout arbitraire de la date de début peut produire une différence sur le nombre d'années en fonction s'il y a une année bissextile ou non. De la même façon pendant des mois, ils prennent entre 28 à 31 jours. À des fins de recherche, nous utilisons ces unités d'un lot (mois et années) et, de façon pragmatique, nous définissons un mois de 30,5 jours et une année en tant que 365.25 jours. Vous devez convertir cette valeur est numérique donc R cesse de jaillir hors de l'unité.OriginalL'auteur AdamO