如何在Python中倒数天数?

如何在Python中倒数天数?,python,date,Python,Date,为了进行web API查询,我尝试格式化一组由管道(“|”)分隔的日期,按时间倒数七天,并将每个日期添加到一个复合字符串中。我阅读了文档并拼凑出date.today()和datetime.timedelta的组合是我所需要的。我写的方法是: def someMethod(): ret = '' pythonic_date = datetime.date.today() for i in range(0, 8): pythonic_date -= datet

为了进行web API查询,我尝试格式化一组由管道(“|”)分隔的日期,按时间倒数七天,并将每个日期添加到一个复合字符串中。我阅读了文档并拼凑出date.today()和datetime.timedelta的组合是我所需要的。我写的方法是:

def someMethod():
    ret = ''
    pythonic_date = datetime.date.today()
    for i in range(0, 8):
        pythonic_date -= datetime.timedelta(days=1)
        ret += "SomePage" + datetime.date.today().strftime("%B" + " ")
        ret += str(pythonic_date.day).lstrip('0')
        ret += ", " + str(pythonic_date.year) + "|"
    ret = ret[0:len(ret) - 1]
    return ret
我希望得到以下输出:

SomePage/2015年6月2日| SomePage/2015年6月1日| SomePage/2015年5月31日| SomePage/2015年5月30日| SomePage/2015年5月29日| SomePage/2015年5月28日| SomePage/2015年5月27日| SomePage/2015年5月26日

相反,我得到以下输出:

SomePage/2015年6月2日| SomePage/2015年6月1日| SomePage/2015年6月31日| SomePage/2015年6月30日| SomePage/2015年6月29日| SomePage/2015年6月28日| SomePage/2015年6月27日| SomePage/2015年6月26日

我看到这里使用
timedelta
只是简单地循环date类对象中的day字段,而不是对整个日期进行操作。我有两个问题:

  • 为什么要这样实施
  • 我该怎么做才能得到我想要的

  • 编辑:再看一眼,我写的函数甚至不能处理年与年之间的移动。说真的,还有什么更好的方法?datetime文档()非常密集。

    不,这根本不是timedelta所做的。它完全符合你的期望

    错误只存在于代码中:您总是从
    datetime.date.today()
    打印月份,而不是从
    pythonic\u date
    打印月份

    打印格式化日期的更好方法是使用单个调用
    strftime

    ret += "SomePage" + pythonic_date.strftime("%B %-d, %Y") + "|"
    

    不,这根本不是timedelta所做的。它完全符合你的期望

    错误只存在于代码中:您总是从
    datetime.date.today()
    打印月份,而不是从
    pythonic\u date
    打印月份

    打印格式化日期的更好方法是使用单个调用
    strftime

    ret += "SomePage" + pythonic_date.strftime("%B %-d, %Y") + "|"
    
    你可以考虑使用这些日期,这会让你的生活更容易。

    import arrow
    
    def someMethod():
        fulldates = []
        for date in [arrow.now().replace(days=-i) for i in range(0, 8)]:
            fulldates.append("SomePage/{fmtdate}".format(fmtdate=date.format("MMM D, YYYY")))
        return '|'.join(fulldates)
    
    print(someMethod())
    
    输出为

    SomePage/Jun 3, 2015|SomePage/Jun 2, 2015|SomePage/Jun 1, 2015|SomePage/May 31, 2015|SomePage/May 30, 2015|SomePage/May 29, 2015|SomePage/May 28, 2015|SomePage/May 27, 2015
    
    你可以考虑使用这些日期,这会让你的生活更容易。

    import arrow
    
    def someMethod():
        fulldates = []
        for date in [arrow.now().replace(days=-i) for i in range(0, 8)]:
            fulldates.append("SomePage/{fmtdate}".format(fmtdate=date.format("MMM D, YYYY")))
        return '|'.join(fulldates)
    
    print(someMethod())
    
    输出为

    SomePage/Jun 3, 2015|SomePage/Jun 2, 2015|SomePage/Jun 1, 2015|SomePage/May 31, 2015|SomePage/May 30, 2015|SomePage/May 29, 2015|SomePage/May 28, 2015|SomePage/May 27, 2015
    

    不相关:并非所有系统都支持。此外,OP还可以使用一个列表:
    lst.append(“SomePage/{:%B%d,%Y}.format(pythonic_date))
    返回“|”。
    结尾。我不知道在前面添加“-”会删除前导零,但鉴于该解决方案不是平台无关的,我不会使用它。话虽如此,你已经发现了一个我应该在评论中看到的愚蠢错误:谢谢!不相关:并非所有系统都支持。此外,OP还可以使用一个列表:
    lst.append(“SomePage/{:%B%d,%Y}.format(pythonic_date))
    返回“|”。
    结尾。我不知道在前面添加“-”会删除前导零,但鉴于该解决方案不是平台无关的,我不会使用它。话虽如此,你已经发现了一个我应该在评论中看到的愚蠢错误:谢谢!这个答案缺少一件事:我还需要以某种方式剪掉day字段中的前导零。我编辑了代码以便没有前导零,输出也会更新,指向箭头的链接不再有效。这个答案缺少一件事:我还需要剪掉day字段中的前导零,不知何故,我编辑了代码,这样就没有前导零,输出也会更新,指向箭头的链接也不再有效。