Jak wyodrębnić rok z obiektu datetime w Pythonie?

108

Chciałbym wyodrębnić rok z bieżącej daty za pomocą Pythona.

W C # wygląda to tak:

 DateTime a = DateTime.Now() 
 a.Year

Co jest wymagane w Pythonie?

grobartn
źródło

Odpowiedzi:

158

Właściwie jest prawie tak samo w Pythonie .. :-)

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

Oczywiście data nie ma powiązanej godziny, więc jeśli również Ci zależy, możesz zrobić to samo z kompletnym obiektem daty i godziny:

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

(Oczywiście nie inaczej, ale możesz oczywiście przechowywać datetime.datetime.today () w zmiennej, zanim pobierzesz rok).

Jedną z kluczowych rzeczy, na które należy zwrócić uwagę, jest to, że składniki czasu mogą się różnić między 32-bitowymi i 64-bitowymi pythonami w niektórych wersjach Pythona (myślę, że drzewo 2.5.x). Na niektórych platformach 64-bitowych znajdziesz takie rzeczy, jak godzina / min / s, a na 32-bitowym godzinę / minutę / sekundę.

Nick Bastin
źródło
1
datetime.datetime.today (). year nie działa dla Pythona 3. Zwrócił błąd AttributeError: obiekt typu „datetime.datetime” nie ma atrybutu „datetime” . Musiałem użyć datetime.today (). Year
twumm
2
@twumm, to dlatego, że zaimportowałeś datę i godzinę jako „z importu datetime datetime”. Jeśli wykonałeś po prostu „zaimportowanie daty i godziny”, rozwiązanie będzie działało dobrze. Jest dokładnie taki sam, jak go masz.
Apteronotus
26
import datetime
a = datetime.datetime.today().year

lub nawet (jak zasugerował Lennart )

a = datetime.datetime.now().year

lub nawet

a = datetime.date.today().year
Szlagier
źródło
1
Chociaż funkcja now () wydaje się bardziej naturalna w przypadku datetime. datetime.date.today (). Year, może. :)
Lennart Regebro
Nie myślałem o tym i wydaje mi się, że wydaje mi się, że jest to bardziej „dokładne” w odniesieniu do czasu, gdzie dzisiaj () mogłoby się wydawać, że oznacza dokładność dni. Dziwne, że (przynajmniej w 2.5.4) datetime.today () i datetime.now () robią to samo
Nie są dokładnie takie same, datetime.now () akceptuje obiekt strefy czasowej, podczas gdy datetime.today () wywołuje po prostu fromtimestamp (time.time ()), więc dzisiaj () zawsze będzie w dowolnej, według Pythona, lokalnej strefie czasowej jest, podczas gdy możesz teraz () powiedzieć ci nieco bardziej interesujące rzeczy.
Nick Bastin,
17

Inne odpowiedzi na to pytanie wydają się trafiać w sedno. Jak byś sam sobie z tym poradził bez przepełnienia stosu? Sprawdź IPython , interaktywną powłokę Pythona z funkcją automatycznego uzupełniania kart.

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

naciśnij klawisz Tab kilka razy, a zostaniesz poproszony o listę członków obiektu „teraz”:

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

a zobaczysz, że now.year jest członkiem obiektu „now”.

Pete
źródło
2
Również to: docs.python.org/library/datatypes.html Ale dziękuję, nie wiedziałem tego o
2
Uznanie za rozwiązanie problemu - uzupełnienie rzeczywistego rozwiązania.
Iceland_jack,
Dla tych, którzy nie chcą instalować ipythona, możesz po prostu opakować dowolną funkcję lub klasę w dir, aby zobaczyć możliwe metody i atrybuty. Na przykład dir (datetime.datetime.now) daje dostępne funkcje, takie jak naciśnięcie klawisza tab w ipythonie.
Saurav Pathak
6

Jeśli chcesz pobrać rok z (nieznanego) obiektu daty i godziny:

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
źródło