【问题标题】:how to check if date is in certain interval python?如何检查日期是否在某个间隔python?
【发布时间】:2016-10-04 21:53:12
【问题描述】:

我正在从 yahoo Finance 导入日期,并希望将它们转换为一种格式,以便我可以将它们与今天进行比较,以检查日期是否在从现在起 3 到 9 个月之间。

这是我目前所拥有的:

today = time.strftime("%Y-%m-%d")
today = datetime.datetime.strptime(today, '%Y-%m-%d')
int_begin = today + datetime.timedelta(days=90)
int_end = today + datetime.timedelta(days=270)

for i in opt["Expiry"]:
    transf_date = datetime.datetime.strptime(opt["Expiry"][1],'%b %d, %Y')
    transf_date = datetime.datetime.strftime(transf_date,"%Y-%m-%d")
    if int_begin <= transf_date and transf_date <= int_end:
        print "True:",i
    else:
        print "False:",i

这里是opt["Expiry"]的内容

0 2017 年 1 月 20 日 2017 年 1 月 20 日 1 日 2017 年 1 月 20 日 2017 年 1 月 20 日 3 日 2017 年 1 月 20 日 4 日 2017 年 1 月 20 日 5 日 2017 年 1 月 20 日 6 日 2017 年 1 月 20 日 7 日 2017 年 1 月 20 日 8 日 2017 年 1 月 20 日 9 日 2017 年 1 月 20 日 10 日 2017 年 1 月 20 日 11 日 2017 年 1 月 20 日 12 日 2017 年 1 月 20 日 13 日 2017 年 1 月 20 日 14 日 2017 年 1 月 20 日 15 日 2017 年 1 月 20 日 16 日 2018 年 1 月 19 日 17 日 2017 年 1 月 20 日 18 日 2018 年 1 月 19 日 19 日 2017 年 1 月 20 日 2017 年 3 月 17 日 21 日 2017 年 1 月 20 日 22 日 2017 年 3 月 17 日 23 日 2017 年 1 月 20 日 24 日 2017 年 3 月 17 日 25 日 2017 年 4 月 21 日 26 日 2017 年 6 月 16 日 27 日 2018 年 1 月 19 日 28 日 2017 年 1 月 20 日 29 日 ... 432 2017 年 1 月 20 日 433 2018 年 1 月 19 日 434 2016 年 10 月 21 日 435 2017 年 1 月 20 日 436 2018 年 1 月 19 日 437 2016 年 10 月 21 日 438 2017 年 1 月 20 日 439 2018 年 1 月 19 日 440 2016 年 10 月 21 日 441 2017 年 1 月 20 日 442 2018 年 1 月 19 日 443 2016 年 10 月 21 日 444 2017 年 1 月 20 日 445 2018 年 1 月 19 日 446 2016 年 10 月 21 日 447 2017 年 1 月 20 日 448 2016 年 10 月 21 日 449 2017 年 1 月 20 日 450 2016 年 10 月 21 日 451 2017 年 1 月 20 日 452 2016 年 10 月 21 日 453 2017 年 1 月 20 日 454 2016 年 10 月 21 日 455 2017 年 1 月 20 日 456 2016 年 10 月 21 日 457 2017 年 1 月 20 日 458 2017 年 1 月 20 日 459 2017 年 1 月 20 日 460 2017 年 1 月 20 日 461 2017 年 1 月 20 日

似乎我有相同的日期格式,即“%Y-%m-%d”,但我仍然没有过滤掉任何值。所有这些都是真实的,在区间内。

【问题讨论】:

  • 请提供opt["Expiry"]的内容,以便我们可以在我们自己的机器上运行您的代码并复制您的问题。
  • 我正在获取选项数据。我得到的日期是从 2016 年到 2018 年,所以并不是所有的日期都应该在合适的时间间隔内。
  • 似乎您在将日期转换为字符串和从字符串转换日期时跳过很多圈,以便您可以将它们以字符串形式相互比较。我建议根本不要将它们转换为字符串; datetime 对象已经具有可比性,它将为您省去很多匹配格式的麻烦。
  • 顺便说一句,您只看到opt["Expiry"][1] 而没有其他任何行,因此您基本上忽略了其他 460 行。您可能应该在逻辑中使用i 而不是opt["Expiry"][1]

标签: python datetime


【解决方案1】:

您使用的是transf_date = datetime.datetime.strptime(opt["Expiry"][1],'%b %d, %Y') 而不是transf_date = datetime.datetime.strptime(opt["Expiry"][i],'%b %d, %Y'),这意味着即使您遍历整个opt["Expiry"],您总是在处理相同的条目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多