2012-10-16 36 views

Trả lời

110

Datetime là một mô-đun cho phép xử lý ngày, giờ và datetimes (tất cả trong số đó là kiểu dữ liệu). Điều này có nghĩa là datetime là cả mô-đun cấp cao nhất cũng như là một loại trong mô-đun đó. Điều này là khó hiểu.

Lỗi của bạn có thể dựa trên việc đặt tên gây nhầm lẫn của mô-đun và bạn hoặc mô-đun bạn đang sử dụng đã nhập.

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

Nhưng, 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.

+2

Cảm ơn bạn! Nó hoạt động hoàn hảo –

+2

Cảm ơn bạn! Đó là một điều nhỏ để bỏ bê nhưng một điều khó tìm. – Prateek

+2

@jozzas câu trả lời tuyệt vời. Tôi đã có một vấn đề với timedelta đã được giải quyết với giải pháp của bạn. Txs. –

5

Bạn nên sử dụng

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

Hoặc thay đổi

from datetime import datetime 

để

import datetime 
+0

Cảm ơn bạn! –

47

Đối với python 3,3

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

+1. Tôi nghĩ rằng đây sẽ là câu trả lời đúng bởi vì như tôi biết, 'datetime nhập' luôn gây ra vấn đề, vì vậy tôi ủng hộ một giải pháp sử dụng' từ datetime import datetime' – jeff

0

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

from datetime import datetime 

Sau đó chỉ cần viết mã như:

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

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

import datetime 

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

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

Bạn thực sự nên nhập e mô-đun vào riêng biệt bí danh.

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

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

  • Calling biến my_datetime thay vì date giảm sự nhầm lẫn vì có đã là một date trong module datetime (datetime.date).
  • Mô-đun và lớp (cả hai được gọi là datetime) không được tô bóng lẫn nhau.
Các vấn đề liên quan