Wie extrahiere ich das Jahr aus einem Python-Datum / Uhrzeit-Objekt?

107

Ich möchte das Jahr mit Python aus dem aktuellen Datum extrahieren.

In C # sieht das so aus:

 DateTime a = DateTime.Now() 
 a.Year

Was ist in Python erforderlich?

grobartn
quelle

Antworten:

154

In Python ist es fast dasselbe .. :-)

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

Natürlich ist dem Datum keine Uhrzeit zugeordnet. Wenn Sie sich also auch darum kümmern, können Sie dasselbe mit einem vollständigen Datum / Uhrzeit-Objekt tun:

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

(Natürlich nicht anders, aber Sie können datetime.datetime.today () in einer Variablen speichern, bevor Sie das Jahr abrufen.)

Eine wichtige Sache ist, dass sich die Zeitkomponenten in einigen Python-Versionen (2.5.x-Baum, glaube ich) zwischen 32-Bit- und 64-Bit-Pythons unterscheiden können. Auf einigen 64-Bit-Plattformen finden Sie also Dinge wie Stunde / Minute / Sekunde, während Sie auf 32-Bit Stunden / Minute / Sekunde erhalten.

Nick Bastin
quelle
1
datetime.datetime.today (). year funktionierte nicht für Python 3. Es wurde ein Fehler zurückgegeben. AttributeError: Typobjekt 'datetime.datetime' hat kein Attribut 'datetime' . Ich musste datetime.today (). Year
twumm
1
@twumm, das lag daran, dass Sie datetime als "von datetime import datetime" importiert haben. Wenn Sie einfach "datetime importieren" durchgeführt haben, funktioniert die Lösung einwandfrei. Es ist genau das gleiche wie du es hast.
Apteronotus
26
import datetime
a = datetime.datetime.today().year

oder sogar (wie Lennart vorgeschlagen hat )

a = datetime.datetime.now().year

oder auch

a = datetime.date.today().year
Stunner
quelle
1
Obwohl sich now () zu einem bestimmten Zeitpunkt natürlicher anfühlt. datetime.date.today (). year, vielleicht. :)
Lennart Regebro
Ich hatte nicht darüber nachgedacht, und ich denke, es fühlt sich in Bezug auf die Zeit "genauer" an, wo heute () eine Präzision von Tagen zu implizieren scheint. Seltsam, dass (zumindest in 2.5.4) datetime.today () und datetime.now () dasselbe tun
Sie sind nicht ganz gleich, datetime.now () akzeptiert ein Zeitzonenobjekt, während datetime.today () nur fromtimestamp (time.time ()) aufruft, und so wird today () immer in der Python sein, die Ihre lokale Zeitzone für möglich hält ist, während Sie jetzt () bekommen können, um Ihnen etwas interessantere Dinge zu erzählen.
Nick Bastin
17

Die anderen Antworten auf diese Frage scheinen genau richtig zu sein. Wie würden Sie das ohne Stapelüberlauf selbst herausfinden? Schauen Sie sich IPython an , eine interaktive Python-Shell, deren Registerkarte automatisch vervollständigt wird.

> 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.

Wenn Sie einige Male die Tabulatortaste drücken, werden Sie mit den Mitgliedern des "Jetzt" -Objekts aufgefordert:

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

und Sie werden sehen, dass now.year ein Mitglied des "now" -Objekts ist.

Pete
quelle
2
Auch dies: docs.python.org/library/datatypes.html Aber danke, ich wusste das nicht über IPython
2
Ein großes Lob für die Problemlösung - Ergänzung der eigentlichen Lösung.
Iceland_jack
Für diejenigen, die ipython nicht installieren möchten, können Sie einfach jede Funktion oder Klasse mit dir umschließen, um die möglichen Methoden und Attribute anzuzeigen. Wie dir (datetime.datetime.now) würde Ihnen die verfügbaren Funktionen geben, die das Drücken der Tabulatortaste in ipython hat.
Saurav Pathak
6

Wenn Sie das Jahr von einem (unbekannten) datetime-Objekt wollen:

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
quelle