python comment convertir datetime dates à virgule ans
Je suis à la recherche d'un moyen de convertir les objets datetime au format décimal année. Ci-dessous est un exemple
>>> obj = SomeObjet()
>>> obj.DATE_OBS
datetime.datetime(2007, 4, 14, 11, 42, 50)
Comment puis-je convertir des données datetime.datetime(2007, 4, 14, 11, 42, 50) à la décimale ans? À partir de ce format jj/mm/aaaa pour ce genre de format aaaa.aaaa
Pouvez-vous donner quelques exemples? Qu'entendez-vous par "virgule"?
À partir de ce format jj/mm/aaaa pour ce genre de format aaaa.aaaa
Tu veux dire, pour le convertir dans un nombre à virgule flottante? Comme convertir jour/mois/heure/etc à un certain nombre? Si oui, alors vous avez besoin de la calculer par vous-même.
Quelque chose comme mois est 1/12 années; jour est 1/365(366, selon les années bissextiles ou non), etc.
Donnez-nous un exemple réel - avec les chiffres
À partir de ce format jj/mm/aaaa pour ce genre de format aaaa.aaaa
Tu veux dire, pour le convertir dans un nombre à virgule flottante? Comme convertir jour/mois/heure/etc à un certain nombre? Si oui, alors vous avez besoin de la calculer par vous-même.
Quelque chose comme mois est 1/12 années; jour est 1/365(366, selon les années bissextiles ou non), etc.
Donnez-nous un exemple réel - avec les chiffres
OriginalL'auteur user739807 | 2011-06-23
Vous devez vous connecter pour publier un commentaire.
Démo:
Cette méthode est probablement précis à la seconde (ou à l'heure si l'heure d'été ou d'autres étranges régional de choses sont en effet). Il fonctionne également correctement pendant leapyears. Si vous avez besoin d'drastique de la résolution (par exemple en raison de changements dans la rotation de la Terre), vous êtes mieux d'interroger un service net.
oui, il y est; c'est une quantité définie. Ce précis à l'intérieur d'une heure, plus si les bibliothèques prendre soin de l'heure d'été (que je ne pense pas qu'ils le font).
Désolé, le sens de "norme généralement acceptée" et non pas " généralement acceptable...'
oui, la suite est bien définie et acceptée par tous les mathématiciens dans l'existance (mais pas les physiciens, qui peut dire la relativité signifie que cette question n'est pas bien définie). Le début de l'année est à l'instant t0. La fin de l'année est à l'instant t1. Si vous prenez n'importe quel moment entre ces deux, vous avez une fraction.
si votre solution est censée être correcte à moins d'une heure, alors vous ne devriez pas utiliser plus de 4 chiffres après le point décimal. 8 chiffres de votre réponse, de façon trompeuse, suggèrent que vous êtes en tenant compte de même des secondes intercalaires que vous n'avez pas. Si l'entrée
date
est connu que dans une journée, alors vous n'avez pas besoin de plus de 3 chiffres, de toute façon (ettime.mktime()
est inutile dans ce cas). btw, il y a des définitions différentes de l'année qui ne sont pas connectés avec la relativité, en aucune façon, par exemple, année sidérale.OriginalL'auteur ninjagecko
Je suis en supposant que vous utilisez ce pour comparer les valeurs datetime. Pour ce faire, veuillez utiliser le timedelta objets au lieu de reiniventing la roue.
Exemple:
Si pour quelque raison vous avez vraiment besoin décimal ans,
datetime
objets de la méthodestrftime()
peut vous donner une représentation entière de jour de l'année en cas de demande de%j
- si c'est ce que vous cherchez, voir ci-dessous pour un exemple simple (seulement 1 jour résolution):367 sorte que le saut de l'année dernière journée ne doit pas devenir la prochaine année.
ce n'est pas la bonne chose à faire. De plus, vous avez un autre bug: vous pouvez toujours sauter
2010.0
et2011.0
et tous les autres nombres, parce que datetime(année=2011,mois=1,jour=1).strftime("%j") est de 1 et non de 0. La solution est de soustraire 1, mais qui est toujours inexacts par jour pendant leapyears.Fixe l'exemple de maintenant.
OriginalL'auteur Kimvais
Après la mise en œuvre de la solution retenue, j'ai eu la révélation que ce modernes pandas version est identique, et beaucoup plus simple:
Doit être utilisé sur une date-heure index Pandas dataframe. Ajoutant que cette solution post vient en haut de ma recherche google pour ce problème.
OriginalL'auteur EHB
C'est un peu plus simple que les autres solutions:
Noter que ce calcule la fraction en fonction du début de la journée, donc le 31 décembre sera 0.997, pas de 1.0.
OriginalL'auteur Matthias Fripp
Surpris personne n'a mentionné... mais le
datetime.timedelta
objets qui sont le résultat de la soustractiondatetime.datetime
un des objets de la division de la méthode. Ainsi, vous pouvez utiliser la fonction simpleoù la division entre les
datetime.timedelta
objets.OriginalL'auteur Luke Davis
Il est possible de calculer des décimales date en utilisant les Pandas de la date julienne et les formules suivantes.
Dans le cas où votre pandas dataframe a un indice date-time:
decimal_date est une série de date (dans le même TZ comme le dataframe index) en forme de quelque chose comme 2007.123452.
Adapté à partir de ce post.
OriginalL'auteur EHB