0

我有两个版本,由于我不知道的原因,这两个版本都不起作用。

第一个版本

from datetime import datetime, date

d = datetime.date(2011, 01, 01)
print(d)

这使

  File "timeSince.py", line 3
    d = datetime.date(2011, 01, 01)
                             ^
SyntaxError: invalid token

第二版

from datetime import datetime, date

d = datetime.date(2011, 1, 1)
print(d)

这使

Traceback (most recent call last):
  File "timeSince.py", line 3, in <module>
    d = datetime.date(2011, 1, 1)
TypeError: descriptor 'date' requires a 'datetime.datetime' object but received
a 'int'

运行 Python 3.3

4

4 回答 4

3

您从日期时间导入日期,所以这将工作:

>>> d = date(2011, 1, 1)
>>> d
datetime.date(2011, 1, 1)

无需放在datetime前面

当您从模块导入方法时,您不再使用模块名称来调用该方法,因为您导入了该特定方法!

笔记:

您的第一个实例是无效的语法,因为在 python 中,整数的开头不能有 0。您必须以这种方式使用它:date(2011, 1, 1)而不是这样:date(2011, 01, 01)

于 2013-05-09T18:54:44.160 回答
2

您的导入语句是错误的(或至少没有帮助),因此您最终在 datetime 类(将日期时间转换为日期)而不是 date 类(创建日期)上使用了 date 方法。

>>> from datetime import datetime, date
>>> datetime.date
<method 'date' of 'datetime.datetime' objects>
>>> datetime.date.__doc__
'Return date object with same year, month and day.'

改为这样做:

>>> import datetime
>>> datetime.date(2011,1,1)
datetime.date(2011, 1, 1)
>>> datetime.date.__doc__
'date(year, month, day) --> date object'
于 2013-05-09T18:59:51.987 回答
2

您正在使用带有前导0数字的整数文字,这在 Python 3 中是不允许的。

在 Python 2 中,这些被解释为八进制值:

>>> 017
15

但是对于那些不是来自 C 背景的人来说,语法是模棱两可的和令人困惑的,现在只支持0o123带有前导的语法。0o旧语法是一个语法错误,以防止知道 C 八进制语法的人创建细微的错误。

两个版本都尝试在datetime.date()没有实例的情况下使用该方法。您只想使用date()

>>> from datetime import date, datetime
>>> date(2011, 1, 1)
datetime.date(2011, 1, 1)
>>> datetime
<type 'datetime.datetime'>
>>> datetime.date
<method 'date' of 'datetime.datetime' objects>
于 2013-05-09T18:56:34.887 回答
0

两个不同的问题。您不能用前导0s 编写整数(这就是您的第一个版本失败的原因),并且您已经datedatetime模块中导入,所以您不应该尝试重新引用它(这就是您的第二个版本失败的原因) . 您的代码应如下所示:

from datetime import date
d = date(2011, 1, 1)
print(d) # prints "2011-01-01"
于 2013-05-09T18:58:41.510 回答