排除“描述符'日期'需要'datetime.datetime'对象,但收到'int'”

时间:2011-04-11 09:45:48

标签: python datetime

在我的代码中,我要求用户提供dd/mm/yyyy格式的日期。

currentdate = raw_input("Please enter todays date in the format dd/mm/yyyy: ")
day,month,year = currentdate.split('/')
today = datetime.date(int(year),int(month),int(day))

这会返回错误

  

TypeError:描述符'date'需要'datetime.datetime'对象但收到'int'

如果我删除了int(),那么我最后会遇到同样的错误,只是说它收到了'str'

我做错了什么?

8 个答案:

答案 0 :(得分:44)

您似乎已导入datetime.datetime模块而不是datetime。这应该工作:

import datetime
currentdate = raw_input("Please enter todays date in the format dd/mm/yyyy: ")
day,month,year = currentdate.split('/')
today = datetime.date(int(year),int(month),int(day))

..或者这个:

from datetime import date
currentdate = raw_input("Please enter todays date in the format dd/mm/yyyy: ")
day,month,year = currentdate.split('/')
today = date(int(year),int(month),int(day))

答案 1 :(得分:29)

你这样导入吗?

from datetime import datetime

然后你必须改变它看起来像这样:

import datetime

说明:在第一种情况下,您实际上正在调用datetime.datetime.date(),即模块datetime中对象datetime上的方法。在后一种情况下,您使用构造函数date()创建一个新的datetime.date()对象。

或者,您可以将导入更改为:

from datetime import datetime, date

然后使用date(y,m,d)构建(不带datetime.前缀)。

答案 2 :(得分:11)

如果你已经

from datetime import datetime

然后你可以像这样构建:

christmas = datetime(2013,12,25)

答案 3 :(得分:5)

如果我这样做,我可以重现错误

from datetime import *

当我这样做时它会消失

import datetime

请检查您的导入。

答案 4 :(得分:4)

You can use both datetime and datetime.datetime. Write the imports like this:

from datetime import datetime
import datetime as dt

time_1 = datetime.strptime('17:00:00', '%H:%M:%S')
time_1 = dt.time(time_1.hour, time_1.minute,  time_1.second)

答案 5 :(得分:2)

我怀疑datetime引用了对象而不是模块。你可能确实有以下代码(可能更复杂):

from datetime import datetime
currentdate = raw_input("Please enter todays date in the format dd/mm/yyyy: ")
day,month,year = currentdate.split('/')
today = datetime.date(int(year),int(month),int(day))

因此,您正在调用date类的datetime方法,而不是调用date模块的datetime函数。

您可以打印datetime对象以查看是否确实如此:

>>> import datetime
>>> print datetime
<module 'datetime' (built-in)>
>>> print datetime.date(1, 1, 1)
0001-01-01
>>> datetime = datetime.datetime
>>> print datetime
<type 'datetime.datetime'>
>>> print datetime.date(1, 1, 1)

Traceback (most recent call last):
  File "<pyshell#12>", line 1, in <module>
    print datetime.date(1, 1, 1)
TypeError: descriptor 'date' requires a 'datetime.datetime' object but received a 'int'

答案 6 :(得分:0)

错误提示您的导入看起来不错。相反,在使用日期时间进行操作时,请确保首先将值转换为日期时间格式。

使用 pandas.to_datetime 进行相同操作,然后再对同一操作执行任何操作。

答案 7 :(得分:0)

<块引用>

TypeError: 描述符 'date' 需要一个 'datetime.datetime' 对象,但收到了一个 'int'

这是因为您使用了年、月、日等变量。

使用这样的东西:

year1, month1, day1 =  [int(d) for d in startDate.split('-')]
print(date(year1, month1, day1))

它会起作用。