nhập đối tượng 'datetime.datetime' không có thuộc tính 'datetime'


127

Tôi đã gặp lỗi sau:

nhập đối tượng 'datetime.datetime' không có thuộc tính 'datetime'

Trên dòng sau:

date = datetime.datetime(int(year), int(month), 1)

Có ai biết lý do cho lỗi?

Tôi đã nhập datetime với from datetime import datetimenếu điều đó hữu ích

Cảm ơn

Câu trả lời:


225

Datetime là một mô-đun cho phép xử lý ngày tháng, thời gian và lịch ngày tháng (tất cả đều là kiểu dữ liệu). Điều này có nghĩa là nó datetimevừa là một mô-đun cấp cao nhất vừa là một kiểu trong mô-đun đó. Điều này thật khó hiểu.

Lỗi của bạn có thể là do đặt tên khó hiểu của mô-đun và những gì bạn hoặc mô-đun bạn đang sử dụng đã được nhập vào.

>>> import datetime
>>> datetime
<module 'datetime' from '/usr/lib/python2.6/lib-dynload/datetime.so'>
>>> datetime.datetime(2001,5,1)
datetime.datetime(2001, 5, 1, 0, 0)

Tuy nhiên, nếu bạn nhập datetime.datetime:

>>> from datetime import datetime
>>> datetime
<type 'datetime.datetime'>
>>> datetime.datetime(2001,5,1) # You shouldn't expect this to work 
                                # as you imported the type, not the module
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'datetime.datetime' has no attribute 'datetime'
>>> datetime(2001,5,1)
datetime.datetime(2001, 5, 1, 0, 0)

Tôi nghi ngờ bạn hoặc một trong các module bạn đang sử dụng đã nhập khẩu như thế này: from datetime import datetime.


3
@jozzas câu trả lời tuyệt vời. Tôi gặp sự cố với bộ đếm thời gian đã được giải quyết bằng giải pháp của bạn. Txs.
Luis Miguel

1
@Jean đây là lỗi của việc datetime phủ bóng tên mô-đun của chính nó bằng một trong các tên lớp của nó, không phải tên của python.
Robino

85

Đối với python 3.3

from datetime import datetime, timedelta
futuredate = datetime.now() + timedelta(days=10)

12
+1. Tôi nghĩ rằng đây sẽ là câu trả lời đúng vì theo như tôi biết, import datetimelúc nào cũng gây ra vấn đề, vì vậy tôi ủng hộ một giải pháp mà công dụngfrom datetime import datetime
jeff

14

Bạn nên sử dụng

date = datetime(int(year), int(month), 1)

Hoặc thay đổi

from datetime import datetime

đến

import datetime

11

Bạn thực sự nên nhập mô-đun vào bí danh của riêng nó .

import datetime as dt
my_datetime = dt.datetime(year, month, day)

Giải pháp trên có những lợi ích sau so với các giải pháp khác:

  • Việc gọi biến my_datetimethay vì datelàm giảm sự nhầm lẫn vì đã có một datetrong mô-đun datetime (datetime.date ).
  • Mô-đun và lớp (cả hai được gọi datetime) không phủ bóng lẫn nhau.

1

Nếu bạn đã sử dụng:

from datetime import datetime

Sau đó, chỉ cần viết mã là:

date = datetime(int(year), int(month), 1)

Nhưng nếu bạn đã sử dụng:

import datetime

thì chỉ bạn mới có thể viết:

date = datetime.datetime(int(2005), int(5), 1)

1

Tôi thấy điều này dễ dàng hơn rất nhiều

from dateutil import relativedelta
relativedelta.relativedelta(end_time,start_time).seconds

1

Tôi gặp phải lỗi tương tự có thể bạn đã nhập mô-đun bằng cách sử dụng chỉ import datetimevì vậy hãy thay đổi form datetime import datetimethành chỉ import datetime. Nó đã làm việc cho tôi sau khi tôi thay đổi nó trở lại.


-2
from datetime import datetime
import time
from calendar import timegm
d = datetime.utcnow()
d = d.strftime("%Y-%m-%dT%H:%M:%S.%fZ")
utc_time = time.strptime(d,"%Y-%m-%dT%H:%M:%S.%fZ")
epoch_time = timegm(utc_time)

6
Cố gắng tránh những câu trả lời chỉ có mã. Bạn có thể chỉnh sửa bài đăng của mình để thêm một số giải thích và liên kết để hỗ trợ mã của bạn.
Tomerikoo
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.