Come estrarre l'anno da un oggetto datetime di Python?


107

Vorrei estrarre l'anno dalla data corrente utilizzando Python.

In C #, questo assomiglia a:

 DateTime a = DateTime.Now() 
 a.Year

Cosa è richiesto in Python?

Risposte:


155

In effetti è quasi lo stesso in Python .. :-)

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

Ovviamente, la data non ha un'ora associata, quindi se ti interessa anche questo, puoi fare lo stesso con un oggetto datetime completo:

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

(Ovviamente non è diverso, ma puoi memorizzare datetime.datetime.today () in una variabile prima di prendere l'anno, ovviamente).

Una cosa fondamentale da notare è che i componenti del tempo possono differire tra pitoni a 32 bit e 64 bit in alcune versioni di python (albero 2.5.x credo). Quindi troverai cose come ora / min / sec su alcune piattaforme a 64 bit, mentre ottieni ora / minuto / secondo su 32 bit.


1
datetime.datetime.today (). year non ha funzionato per Python 3. Ha restituito un errore AttributeError: il tipo di oggetto "datetime.datetime" non ha attributo "datetime" . Ho dovuto usare datetime.today (). Year
twumm l'

2
@twumm, questo perché hai importato datetime come "from datetime import datetime". Se avessi fatto semplicemente "import datetime", la soluzione funzionerà bene. È esattamente lo stesso che hai tu.
Apteronotus

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

o anche (come suggerito da Lennart )

a = datetime.datetime.now().year

o anche

a = datetime.date.today().year

1
Anche se now () sembra più naturale su un datetime. datetime.date.today (). year, forse. :)
Lennart Regebro

Non ci avevo pensato, e immagino che sia più "accurato" rispetto al tempo, dove oggi () potrebbe sembrare implicare una precisione di giorni. Strano che (almeno nella 2.5.4) datetime.today () e datetime.now () facciano la stessa cosa

Non sono esattamente la stessa cosa, datetime.now () accetta un oggetto timezone, mentre datetime.today () chiama solo fromtimestamp (time.time ()), e quindi today () sarà sempre in qualunque Python pensi che il tuo fuso orario locale è, mentre puoi ottenere now () per dirti cose leggermente più interessanti.
Nick Bastin

17

Le altre risposte a questa domanda sembrano centrare il punto. Ora come lo capiresti da solo senza overflow dello stack? Dai un'occhiata a IPython , una shell Python interattiva che ha il completamento automatico delle schede.

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

premi tab alcune volte e ti verranno chiesti i membri dell'oggetto "now":

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

e vedrai che now.year è un membro dell'oggetto "now".


2
Inoltre, questo: docs.python.org/library/datatypes.html Ma grazie, non lo sapevo su IPython

2
Complimenti per la risoluzione dei problemi , a complemento della soluzione effettiva.
Iceland_jack

Per coloro che non vogliono installare ipython, puoi semplicemente racchiudere qualsiasi funzione o classe con dir per vedere i possibili metodi e attributi. Ad esempio, dir (datetime.datetime.now) ti darebbe le funzioni disponibili come premere tab ha in ipython.
Saurav Pathak

6

Se vuoi l'anno da un oggetto datetime (sconosciuto):

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.