Bagaimana cara mengekstrak tahun dari objek datetime Python?

107

Saya ingin mengekstrak tahun dari tanggal sekarang menggunakan Python.

Dalam C #, ini terlihat seperti:

 DateTime a = DateTime.Now() 
 a.Year

Apa yang dibutuhkan dalam Python?

grobartn.dll
sumber

Jawaban:

156

Faktanya hampir sama dengan Python .. :-)

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

Tentu saja, tanggal tidak memiliki waktu yang terkait, jadi jika Anda juga peduli tentang itu, Anda dapat melakukan hal yang sama dengan objek datetime lengkap:

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

(Jelas tidak berbeda, tetapi Anda dapat menyimpan datetime.datetime.today () dalam variabel sebelum Anda mengambil tahun, tentu saja).

Satu hal penting yang perlu diperhatikan adalah bahwa komponen waktu dapat berbeda antara piton 32-bit dan 64-bit di beberapa versi python (menurut saya pohon 2.5.x). Jadi Anda akan menemukan hal-hal seperti jam / menit / detik pada beberapa platform 64-bit, sementara Anda mendapatkan jam / menit / detik pada 32-bit.

Nick Bastin
sumber
1
datetime.datetime.today (). tahun tidak bekerja untuk Python 3. Ini mengembalikan kesalahan AttributeError: type object 'datetime.datetime' tidak memiliki atribut 'datetime' . Saya harus menggunakan datetime.today (). Year
twumm
2
@twumm, itu karena Anda mengimpor datetime sebagai "dari datetime import datetime". Jika Anda hanya melakukan "import datetime", solusi akan bekerja dengan baik. Ini persis sama dengan yang Anda miliki.
Apteronotus
26
import datetime
a = datetime.datetime.today().year

atau bahkan (seperti yang disarankan Lennart )

a = datetime.datetime.now().year

atau bahkan

a = datetime.date.today().year
Cantik
sumber
1
Meskipun sekarang () terasa lebih alami pada suatu waktu. datetime.date.today (). year, mungkin. :)
Lennart Regebro
Saya tidak memikirkannya, dan saya rasa ini memang terasa lebih "akurat" sehubungan dengan waktu, di mana hari ini () mungkin tampak menyiratkan ketepatan hari. Aneh bahwa (setidaknya di 2.5.4) datetime.today () dan datetime.now () melakukan hal yang sama
Mereka tidak persis sama, datetime.now () menerima objek zona waktu, sedangkan datetime.today () hanya memanggil fromtimestamp (time.time ()), dan hari ini () akan selalu dalam apa pun yang Python pikirkan tentang zona waktu lokal Anda adalah, sedangkan Anda bisa mendapatkan now () untuk memberi tahu Anda hal-hal yang sedikit lebih menarik.
Nick Bastin
17

Jawaban lain untuk pertanyaan ini tampaknya tepat. Sekarang bagaimana Anda mengetahui hal ini sendiri tanpa stack overflow? Lihat IPython , shell Python interaktif yang memiliki tab pelengkapan otomatis.

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

tekan tab beberapa kali dan Anda akan diminta dengan anggota objek "sekarang":

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

dan Anda akan melihat bahwa now.year adalah anggota dari objek "sekarang".

Pete
sumber
2
Juga, ini: docs.python.org/library/datatypes.html Tapi terima kasih, saya tidak tahu tentang IPython
2
Pujian untuk pemecahan masalah - melengkapi solusi aktual.
Iceland_jack
Bagi mereka yang tidak ingin menginstal ipython, Anda bisa membungkus fungsi atau kelas apa pun dengan dir untuk melihat kemungkinan metode dan atribut. Seperti, dir (datetime.datetime.now) akan memberi Anda fungsi yang tersedia seperti menekan tab di ipython.
Saurav Pathak
6

Jika Anda menginginkan tahun dari objek datetime (tidak diketahui):

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
sumber