¿Cómo extraer el año de un objeto de fecha y hora de Python?

107

Me gustaría extraer el año de la fecha actual usando Python.

En C #, esto se ve así:

 DateTime a = DateTime.Now() 
 a.Year

¿Qué se requiere en Python?

Grobartn
fuente

Respuestas:

155

De hecho, es casi lo mismo en Python .. :-)

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

Por supuesto, la fecha no tiene una hora asociada, por lo que si eso también le importa, puede hacer lo mismo con un objeto de fecha y hora completo:

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

(Obviamente no es diferente, pero puede almacenar datetime.datetime.today () en una variable antes de tomar el año, por supuesto).

Una cosa clave a tener en cuenta es que los componentes de tiempo pueden diferir entre pitones de 32 bits y 64 bits en algunas versiones de Python (creo que el árbol 2.5.x). Por lo tanto, encontrará cosas como horas / min / seg en algunas plataformas de 64 bits, mientras que obtiene horas / minutos / segundos en 32 bits.

Nick Bastin
fuente
1
datetime.datetime.today (). year no funcionó para Python 3. Devolvió un error AttributeError: type object 'datetime.datetime' no tiene atributo 'datetime' . Tuve que usar datetime.today ().
Year
2
@twumm, eso se debió a que importó datetime como "from datetime import datetime". Si hubiera hecho simplemente "importar fecha y hora", la solución funcionará bien. Es exactamente igual a como lo tienes.
Apteronotus
26
import datetime
a = datetime.datetime.today().year

o incluso (como sugirió Lennart )

a = datetime.datetime.now().year

o incluso

a = datetime.date.today().year
Persona maravillosa
fuente
1
Aunque ahora () se siente más natural en una fecha y hora. datetime.date.today (). año, tal vez. :)
Lennart Regebro
No había pensado en eso, y creo que se siente más "exacto" con respecto al tiempo, donde hoy () podría parecer que implica una precisión de días. Es extraño que (al menos en 2.5.4) datetime.today () y datetime.now () hagan lo mismo
No son exactamente lo mismo, datetime.now () acepta un objeto de zona horaria, mientras que datetime.today () solo llama a fromtimestamp (time.time ()), por lo que today () siempre estará en lo que Python crea que es su zona horaria local es decir, mientras que ahora () puede decirle cosas un poco más interesantes.
Nick Bastin
17

Las otras respuestas a esta pregunta parecen dar en el clavo. Ahora, ¿cómo resolvería esto por sí mismo sin desbordamiento de pila? Echa un vistazo a IPython , un shell de Python interactivo que tiene pestañas autocompletar.

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

presione el tabulador varias veces y se le indicarán los miembros del objeto "ahora":

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

y verá que now.year es un miembro del objeto "ahora".

Pete
fuente
2
Además, esto: docs.python.org/library/datatypes.html Pero gracias, no sabía eso sobre IPython
2
Felicitaciones por la resolución de problemas , complementando la solución real.
Iceland_jack
Para aquellos que no quieran instalar ipython, simplemente pueden envolver cualquier función o clase con dir para ver los posibles métodos y atributos. Como, dir (datetime.datetime.now) le daría las funciones disponibles como presionar tab tiene en ipython.
Saurav Pathak
6

Si desea el año de un objeto de fecha y hora (desconocido):

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
fuente