Comment extraire l'année d'un objet datetime Python?

107

Je voudrais extraire l'année de la date actuelle en utilisant Python.

En C #, cela ressemble à:

 DateTime a = DateTime.Now() 
 a.Year

Qu'est-ce qui est requis en Python?

Grobartn
la source

Réponses:

156

C'est en fait presque la même chose en Python .. :-)

import datetime
year = datetime.date.today().year

Bien sûr, la date n'a pas d'heure associée, donc si vous vous souciez de cela aussi, vous pouvez faire de même avec un objet datetime complet:

import datetime
year = datetime.datetime.today().year

(Evidemment pas différent, mais vous pouvez stocker datetime.datetime.today () dans une variable avant de saisir l'année, bien sûr).

Une chose clé à noter est que les composants temporels peuvent différer entre les pythons 32 bits et 64 bits dans certaines versions de python (arbre 2.5.x je pense). Ainsi, vous trouverez des choses comme heure / min / sec sur certaines plates-formes 64 bits, tandis que vous obtenez heure / minute / seconde sur 32 bits.

Nick Bastin
la source
1
datetime.datetime.today (). year n'a pas fonctionné pour Python 3. Il a renvoyé une erreur AttributeError: l'objet de type 'datetime.datetime' n'a pas d'attribut 'datetime' . J'ai dû utiliser datetime.today ().
Year
2
@twumm, c'est parce que vous avez importé datetime en tant que "from datetime import datetime". Si vous aviez fait simplement "importer datetime", la solution fonctionnera correctement. C'est exactement la même chose que vous l'avez.
Apteronotus
26
import datetime
a = datetime.datetime.today().year

ou même (comme le suggérait Lennart )

a = datetime.datetime.now().year

ou même

a = datetime.date.today().year
Stunner
la source
1
Bien que now () semble plus naturel sur une date / heure. datetime.date.today (). year, peut-être. :)
Lennart Regebro
Je n'avais pas pensé à cela, et je suppose que cela semble plus «précis» par rapport au temps, où aujourd'hui () peut sembler impliquer une précision de jours. Bizarre que (au moins en 2.5.4) datetime.today () et datetime.now () fassent la même chose
Ils ne sont pas tout à fait les mêmes, datetime.now () accepte un objet timezone, tandis que datetime.today () appelle simplement fromtimestamp (time.time ()), et donc today () sera toujours dans ce que Python pense votre fuseau horaire local est, alors que vous pouvez obtenir maintenant () pour vous dire des choses un peu plus intéressantes.
Nick Bastin
17

Les autres réponses à cette question semblent le faire parfaitement. Maintenant, comment pourriez-vous comprendre cela par vous-même sans débordement de pile? Découvrez IPython , un shell Python interactif doté de la saisie semi-automatique des onglets.

> ipython
import Python 2.5 (r25:51908, Nov  6 2007, 16:54:01)
Type "copyright", "credits" or "license" for more information.

IPython 0.8.2.svn.r2750 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object'. ?object also works, ?? prints more.

In [1]: import datetime
In [2]: now=datetime.datetime.now()
In [3]: now.

appuyez plusieurs fois sur l'onglet et vous serez invité à indiquer les membres de l'objet "maintenant":

now.__add__           now.__gt__            now.__radd__          now.__sub__           now.fromordinal       now.microsecond       now.second            now.toordinal         now.weekday
now.__class__         now.__hash__          now.__reduce__        now.astimezone        now.fromtimestamp     now.min               now.strftime          now.tzinfo            now.year
now.__delattr__       now.__init__          now.__reduce_ex__     now.combine           now.hour              now.minute            now.strptime          now.tzname
now.__doc__           now.__le__            now.__repr__          now.ctime             now.isocalendar       now.month             now.time              now.utcfromtimestamp
now.__eq__            now.__lt__            now.__rsub__          now.date              now.isoformat         now.now               now.timetuple         now.utcnow
now.__ge__            now.__ne__            now.__setattr__       now.day               now.isoweekday        now.replace           now.timetz            now.utcoffset
now.__getattribute__  now.__new__           now.__str__           now.dst               now.max               now.resolution        now.today             now.utctimetuple

et vous verrez que now.year est membre de l'objet "now".

Pete
la source
2
Aussi, ceci: docs.python.org/library/datatypes.html Mais merci, je ne savais pas cela à propos d'IPython
2
Félicitations pour la résolution de problèmes - complétant la solution actuelle.
Iceland_jack
Pour ceux qui ne veulent pas installer ipython, vous pouvez simplement envelopper n'importe quelle fonction ou classe avec dir pour voir les méthodes et attributs possibles. Comme, dir (datetime.datetime.now) vous donnerait les fonctions disponibles comme appuyer sur tab dans ipython.
Saurav Pathak le
6

Si vous voulez l'année à partir d'un objet datetime (inconnu):

tijd = datetime.datetime(9999, 12, 31, 23, 59, 59)

>>> tijd.timetuple()
time.struct_time(tm_year=9999, tm_mon=12, tm_mday=31, tm_hour=23, tm_min=59, tm_sec=59, tm_wday=4, tm_yday=365, tm_isdst=-1)
>>> tijd.timetuple().tm_year
9999
Collin Kleiboer
la source