Как извлечь год из объекта datetime Python?

108

Я хотел бы извлечь год из текущей даты с помощью Python.

В C # это выглядит так:

 DateTime a = DateTime.Now() 
 a.Year

Что требуется в Python?

Grobartn
источник

Ответы:

158

На самом деле в Python почти то же самое .. :-)

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

Конечно, с датой не связано время, поэтому, если вас это тоже волнует, вы можете сделать то же самое с полным объектом datetime:

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

(Очевидно, что ничем не отличается, но вы, конечно, можете сохранить datetime.datetime.today () в переменной перед тем, как получить год).

Следует отметить один ключевой момент: компоненты времени могут различаться между 32-битными и 64-битными питонами в некоторых версиях Python (я думаю, дерево 2.5.x). Таким образом, на некоторых 64-битных платформах вы найдете такие вещи, как часы / минуты / секунды, а на 32-битных - часы / минуты / секунды.

Ник Бастин
источник
1
datetime.datetime.today (). year не работал для Python 3. Он возвратил ошибку AttributeError: объект типа 'datetime.datetime' не имеет атрибута 'datetime' . Мне пришлось использовать datetime.today (). Year
twumm
2
@twumm, это потому, что вы импортировали datetime как «from datetime import datetime». Если вы сделали просто «импорт даты и времени», решение будет работать нормально. Он точно такой же, как у вас.
Apteronotus
26
import datetime
a = datetime.datetime.today().year

или даже (как предложил Леннарт )

a = datetime.datetime.now().year

или даже

a = datetime.date.today().year
Потрясающее зрелище
источник
1
Хотя now () кажется более естественным в datetime. datetime.date.today (). год, может быть. :)
Леннарт Регебро
Я не думал об этом, и я полагаю, что это кажется более "точным" относительно времени, где сегодня () может показаться, что это означает точность дней. Странно, что (по крайней мере, в 2.5.4) datetime.today () и datetime.now () делают одно и то же
Они не совсем то же самое, datetime.now () принимает объект часового пояса, тогда как datetime.today () просто вызывает fromtimestamp (time.time ()), и поэтому сегодня () всегда будет в том, что Python считает вашим местным часовым поясом есть, тогда как вы можете получить now (), чтобы рассказать вам немного более интересные вещи.
Ник Бастин,
17

Другие ответы на этот вопрос, кажется, попадают в точку. Как бы вы сами в этом разобрались без переполнения стека? Проверьте IPython , интерактивную оболочку Python , который имеет вкладку автозаполнения.

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

нажмите вкладку несколько раз, и вам будут предложены элементы объекта «сейчас»:

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

и вы увидите, что now.year является членом объекта «сейчас».

Пит
источник
2
Кроме того, это: docs.python.org/library/datatypes.html Но спасибо, я не знал этого о IPython
2
Престижность за решение проблем - дополнение к фактическому решению.
Iceland_jack
Для тех, кто не хочет устанавливать ipython, вы можете просто обернуть любую функцию или класс с помощью dir, чтобы увидеть возможные методы и атрибуты. Например, dir (datetime.datetime.now) предоставит вам доступные функции, такие как нажатие вкладки в ipython.
Саурав Патхак,
6

Если вам нужен год из (неизвестного) объекта datetime:

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
Коллин Клейбоер
источник