首页 > 解决方案 > 以字符串格式返回一天

问题描述

我正在尝试迭代而不是手动执行代码。我想做的如下:我添加一个日期(字符串格式)作为输入

start=input("Start: mm/dd/yyyy ")

我将此日期设置为等于结束日期:

end=start

然后我运行一些代码

func1(start, end)

所以我的实际代码如下:

start=input("\nStart: mm/dd/yyyy ")
end=start
func1(start, end)

func1完成运行时,代码停止。所以我需要再次手动添加一个新日期并执行代码。但是,我想做以下事情:

因此,例如:如果我的开始日期是06/26/2020(输入字符串格式),我的结束日期将是06/26/2020并且我的代码运行。当它完成运行时,我应该回到开始日期06/25/2020(此时输入字符串格式),即在我原来的开始日期和结束日期前一天06/25/2020,让代码再次运行。

所以我会

(1)
start = 06/26/2020
end = 06/26/2020
func1(start, end)

(2)
start = 06/25/2020
end = 06/25/2020
func1(start, end)

(3)
start = 06/24/2020
end = 06/24/2020
func1(start, end)

等等。这是一个循环,它应该一直运行到 date( start) 到达06/01/2020

问题是日期是字符串格式,我不知道如何返回一个以通过do-loop迭代代码。

更新:

如果尝试以下操作:

start ="06/26/2020"
day = datetime.strptime(start,'%m/%d/%Y')
for i in range(5):
    
    start=str(day.strftime("%m/%d/%Y"))
    end=start

    print (day - timedelta(days=i))

它不会返回一天,但会打印相同的日期。

标签: pythondo-loops

解决方案


仅作为说明(除了 Rui 的帖子),而不是完整的答案:

from datetime import datetime, timedelta

day_str = '06/26/2020'
day = datetime.strptime(day_str,'%m/%d/%Y')
for i in range(5):
    print(day - timedelta(days=i))

编辑:如果您需要循环内的字符串格式,那么您可以尝试:

day_str = '06/26/2020'
day = datetime.strptime(day_str,'%m/%d/%Y')
for i in range(5):
    print((day - timedelta(days=i)).strftime('%m/%d/%Y'))

EDIT2:不确定我是否理解正确,但请看:

str_start ="06/26/2020"
print(str_start)
day_start = datetime.strptime(start,'%m/%d/%Y')
day_end = day_start - timedelta(days=1)
str_end = day_end.strftime("%m/%d/%Y")
print(str_end)

推荐阅读