我正在尝试格式化一组由竖线(“|”)分隔的日期,以便我进行的 Web API 查询,及时倒计时 7 天并将这些日期中的每一个添加到复合字符串中。我阅读了文档并将 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/June 2, 2015|SomePage/June 1, 2015|SomePage/May 31, 2015|SomePage/May 30, 2015|SomePage/May 29, 2015|SomePage/May 28, 2015|SomePage/May 27, 2015|SomePage/May 26, 2015
相反,我得到以下输出:
SomePage/June 2, 2015|SomePage/June 1, 2015|SomePage/June 31, 2015|SomePage/June 30, 2015|SomePage/June 29, 2015|SomePage/June 28, 2015|SomePage/June 27, 2015|SomePage/June 26, 2015
我看到在这里使用 timedelta 只是天真地循环回日期类对象中的日期字段,而不是对整个日期进行操作。我有两个问题:
- 为什么要这样实现?
- 我该怎么做才能得到我想要的东西?
编辑:再看一遍,我编写的函数甚至无法处理年份之间的移动。说真的,这样做的更好方法是什么?日期时间文档 ( https://docs.python.org/3/library/datetime.html#datetime.timedelta.resolution ) 非常密集。
请您参考如下方法:
不,这根本不是 timedelta 所做的。它完全符合您的预期。
错误只是在您的代码中:您总是从 datetime.date.today() 中打印月份,而不是从 pythonic_date 中打印。
打印格式化日期的更好方法是使用对 strftime 的单个调用:
ret += "SomePage" + pythonic_date.strftime("%B %-d, %Y") + "|"
