微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以日期的形式返回一天的日期

如何解决以日期的形式返回一天的日期

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

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)

,依此类推。 这是一个循环,它将一直运行到日期(start)达到06/01/2020为止。

问题在于日期是字符串格式,我不知道如何通过do循环来迭代代码

更新:

如果尝试以下操作:

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))

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

解决方法

您可以解析字符串格式的时间并将其转换为python中的datetime格式,然后可以自由比较两个datetime变量并终止循环。

from datetime import datetime
time_str = '06/26/2020'
# t is datetime type
t = datetime.strptime(time_str,'%m/%d/%Y')

# output: False
print(t < datetime.now())

EDIT2:

关于您的UPDATE,它应该显示为:

2020-06-26 00:00:00
2020-06-25 00:00:00
2020-06-24 00:00:00
2020-06-23 00:00:00
2020-06-22 00:00:00

但是它不会更改startend变量的值。所以我建议这样做:

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('start:',start)
    print('end:',end)
    # move day 
    day = day - timedelta(days=1)

不确定这是否是您想要的。

,

仅作为示例(除了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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。