Làm cách nào để trích xuất năm từ một đối tượng datetime trong Python?


107

Tôi muốn trích xuất năm từ ngày hiện tại bằng Python.

Trong C #, điều này trông giống như:

 DateTime a = DateTime.Now() 
 a.Year

Những gì được yêu cầu trong Python?

Câu trả lời:


155

Trên thực tế, nó gần như giống nhau trong Python .. :-)

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

Tất nhiên, ngày tháng không có thời gian liên quan, vì vậy nếu bạn cũng quan tâm đến điều đó, bạn có thể làm tương tự với một đối tượng datetime hoàn chỉnh:

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

(Tất nhiên là không có gì khác biệt, nhưng bạn có thể lưu trữ datetime.datetime.today () trong một biến trước khi lấy năm).

Một điều quan trọng cần lưu ý là các thành phần thời gian có thể khác nhau giữa các trăn 32-bit và 64-bit trong một số phiên bản python (tôi nghĩ là cây 2.5.x). Vì vậy, bạn sẽ tìm thấy những thứ như giờ / phút / giây trên một số nền tảng 64 bit, trong khi bạn nhận được giờ / phút / giây trên 32 bit.


1
datetime.datetime.today (). year không hoạt động đối với Python 3. Nó trả về lỗi AttributeError: type object 'datetime.datetime' không có thuộc tính 'datetime' . Tôi đã phải sử dụng datetime.today (). Year
twumm

2
@twumm, đó là vì bạn đã nhập datetime là "từ datetime nhập datetime". Nếu bạn chỉ thực hiện "nhập ngày giờ", giải pháp sẽ hoạt động tốt. Nó giống hệt như bạn có nó.
Apteronotus

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

hoặc thậm chí (như Lennart đề xuất )

a = datetime.datetime.now().year

hoặc thậm chí

a = datetime.date.today().year

1
Mặc dù bây giờ () cảm thấy tự nhiên hơn vào ngày giờ. datetime.date.today (). năm, có thể. :)
Lennart Regebro

Tôi đã không nghĩ về điều đó, và tôi đoán nó cảm thấy "chính xác" hơn về thời gian, trong đó ngày hôm nay () dường như ngụ ý độ chính xác của ngày. Weird đó (ít nhất là trong 2.5.4) datetime.today () và datetime.now () làm điều tương tự

Chúng không hoàn toàn giống nhau, datetime.now () chấp nhận một đối tượng múi giờ, trong khi datetime.today () chỉ gọi fromtimestamp (time.time ()), và vì vậy hôm nay () sẽ luôn ở bất cứ thứ gì Python nghĩ là múi giờ địa phương của bạn là, trong khi bây giờ bạn có thể () để cho bạn biết những điều thú vị hơn một chút.
Nick Bastin

17

Các câu trả lời khác cho câu hỏi này dường như trúng đích. Bây giờ bạn sẽ tự mình tìm ra điều này như thế nào mà không bị tràn ngăn xếp? Kiểm tra IPython , một trình bao Python tương tác có tính năng tự động hoàn thành tab.

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

nhấn tab một vài lần và bạn sẽ được nhắc với các thành viên của đối tượng "bây giờ":

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

và bạn sẽ thấy rằng now.year là một thành viên của đối tượng "now".


2
Ngoài ra, cái này: docs.python.org/library/datatypes.html Nhưng cảm ơn bạn, tôi không biết điều đó về IPython

2
Kudos để giải quyết vấn đề - bổ sung cho giải pháp thực tế.
Iceland_jack

Đối với những người không muốn cài đặt ipython, bạn có thể bọc bất kỳ hàm hoặc lớp nào bằng dir để xem các phương thức và thuộc tính khả thi. Giống như, dir (datetime.datetime.now) sẽ cung cấp cho bạn các chức năng có sẵn như nhấn tab có trong ipython.
Saurav Pathak

6

Nếu bạn muốn năm từ một đối tượng datetime (không xác định):

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.