Como extrair o ano de um objeto datetime Python?

107

Eu gostaria de extrair o ano da data atual usando Python.

Em C #, isso se parece com:

 DateTime a = DateTime.Now() 
 a.Year

O que é necessário em Python?

Grobartn
fonte

Respostas:

155

Na verdade, é quase o mesmo em Python .. :-)

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

Obviamente, a data não tem uma hora associada, então se você se preocupa com isso também, você pode fazer o mesmo com um objeto datetime completo:

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

(Obviamente não é diferente, mas você pode armazenar datetime.datetime.today () em uma variável antes de pegar o ano, é claro).

Uma coisa importante a se notar é que os componentes de tempo podem diferir entre pythons de 32 e 64 bits em algumas versões do python (árvore 2.5.x, eu acho). Portanto, você encontrará coisas como hora / min / s em algumas plataformas de 64 bits, enquanto obtém hora / minuto / segundo em 32 bits.

Nick Bastin
fonte
1
datetime.datetime.today (). year não funcionou para Python 3. Ele retornou um erro AttributeError: o objeto de tipo 'datetime.datetime' não tem atributo 'datetime' . Tive que usar datetime.today ().
Year
2
@twumm, isso ocorreu porque você importou datetime como "from datetime import datetime". Se você simplesmente "import datetime", a solução funcionará bem. É exatamente o mesmo que você.
Apteronotus
26
import datetime
a = datetime.datetime.today().year

ou mesmo (como Lennart sugeriu )

a = datetime.datetime.now().year

ou mesmo

a = datetime.date.today().year
Stunner
fonte
1
Embora now () pareça mais natural em um datetime. datetime.date.today (). year, talvez. :)
Lennart Regebro
Eu não tinha pensado nisso, e acho que parece mais "preciso" com relação ao tempo, onde hoje () pode parecer implicar uma precisão de dias. Estranho que (pelo menos em 2.5.4) datetime.today () e datetime.now () façam a mesma coisa
Eles não são exatamente iguais, datetime.now () aceita um objeto de fuso horário, enquanto datetime.today () apenas chama fromtimestamp (time.time ()) e, portanto, today () sempre estará em qualquer que o Python achar que seu fuso horário local é, enquanto você pode obter agora () para lhe dizer coisas um pouco mais interessantes.
Nick Bastin
17

As outras respostas a esta pergunta parecem acertar no ponto. Agora, como você descobriria isso por si mesmo sem estouro de pilha? Verifique o IPython , um shell Python interativo que possui autocompletar guias.

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

pressione tab algumas vezes e você verá os membros do objeto "agora":

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 você verá que now.year é um membro do objeto "now".

Pete
fonte
2
Além disso, este: docs.python.org/library/datatypes.html Mas obrigado, eu não sabia disso sobre o IPython
2
Parabéns pela resolução de problemas - complementando a solução real.
Islândia_jack
Para aqueles que não desejam instalar o ipython, você pode simplesmente envolver qualquer função ou classe com dir para ver os métodos e atributos possíveis. Por exemplo, dir (datetime.datetime.now) daria a você as funções disponíveis, como pressionar tab no ipython.
Saurav Pathak
6

Se você quiser o ano de um objeto datetime (desconhecido):

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
fonte