为什么我会收到此 Python 日期时间错误?

时间:2021-04-13 19:17:09

标签: python

在以下代码中,我尝试使用 Python 和 Yahoo Earnings Calendar 库下载收入数据。但是,我遇到了日期问题。我正在尝试创建一个日期范围,开始日期是执行代码的日期,结束日期是第二天。这是我的代码:

# Set date range
DAYS_AHEAD = 1

# This works
# start_date = dt.date(2021, 4, 14)

# This doesn't work
start_date = dt.datetime.today()
# This doesn't work either
start_date = dt.datetime.now()

# This works for the end date when I use the first start_date declared above
end_date = dt.date(2021, 4, 14) + timedelta(days=DAYS_AHEAD)

# Download earnings calendar
yec = YahooEarningsCalendar()
earnings_list = yec.earnings_between(start_date, end_date)

获取收入列表的最后一条语句引发以下错误:

    TypeError: When either from_date or to_date is not a datetime.date object.
    127         """
--> 128         if from_date > to_date:
    129             raise ValueError(
    130                 'From-date should not be after to-date')

TypeError: can't compare datetime.datetime to datetime.date

如果我在 Python REPL 中输入上面设置开始和结束日期的代码,我会看到以下内容:

>>> type(start_date)
<class 'datetime.datetime'>
>>>type(end_date)
<class 'datetime.datetime'>

此外,如果我运行下面的命令来判断哪个变量具有哪种类型,以便确定需要将哪个变量转换为另一个变量的类型,它们都返回“True”。

>>> isinstance(start_date, datetime.datetime)
>>> isinstance(start_date, datetime.date)
>>> isinstance(end_date, datetime.datetime)
>>> isinstance(end_date, datetime.date)

它们似乎属于同一类和类型,所以我为什么不能将它们相互比较?如何将其中一个日期转换为与另一个日期相同的类型,以便进行比较?

1 个答案:

答案 0 :(得分:2)

(define (squared-max x y z) (max (* x x) (* y y) (* z z)) ) 继承自 datetimedate(有意义,是吗?),所以这就是 time 检查返回 true 的原因。

如果您不需要时间组件,只需使用 isinstances:

date

如果您已经有一个 import datetime DAYS_AHEAD = 1 start_date = datetime.date.today() end_date = start_date + datetime.timedelta(days=DAYS_AHEAD) # Download earnings calendar yec = YahooEarningsCalendar() earnings_list = yec.earnings_between(start_date, end_date) 对象,您可以使用 datetime.datetime 提取日期:

.date()