繁体   English   中英

开始数据和结束日期之间的python循环

[英]python loop between start data and end date

我在从开始日期和结束日期进行正确循环时遇到问题。

它们都是我从 js 以字符串格式获得的。

例如开始日期2021-07-31 07:30:00

结束游戏2021-10-27

然后,我转换他们都在datatime例如其如何我转换结束日期

 _endDate = datetime.strptime(_ruccerenceList[0], "%Y-%m-%d")  

timedelta循环中,我想将天数添加到开始日期。

 +  dt.timedelta(days=int(_ruccerenceList[2])) 

_ruccerenceList[2]可以是 1-99

所以循环必须结束然后Start date > End Date

我尝试它看起来很有趣但首先我尝试这样做

while _perData <= _endDate:

当尝试这种方式时

                date_array = \
                    (datetime.strptime(date, "%Y-%m-%d %H:%M:%S") + dt.timedelta(days=x) for x in range(int(_ruccerenceList[2]), (_endDate-datetime.strptime(date, "%Y-%m-%d %H:%M:%S")).days))
                
                for date_object in date_array:


                    print(date_object.strftime("%Y-%m-%d"))

但它不工作,例如_ruccerenceList[2]是 3,然后第一个循环工作正常,但它不是每 3 天,而是每 1 天。

知道如何解决吗?

假设您有三个变量start_stringend_stringdelta_string ,它们对应于您收到的数据。 那么这应该做你想做的。

import datetime as dt
from datetime import datetime
FORMAT = "%Y-%m-%d"
start = datetime.strptime(start_string, FORMAT)
end = datetime.strptime(end_string, FORMAT)
delta = dt.timedelta(days=int(delta_string))
curr = start
while curr <= end:
  print(curr)
  curr += delta

使用start_string="2021-07-31"end_string="2021-10-27"delta_string="3" ,输出如下:

2021-07-31 00:00:00
2021-08-03 00:00:00
2021-08-06 00:00:00
2021-08-09 00:00:00
2021-08-12 00:00:00
2021-08-15 00:00:00
2021-08-18 00:00:00
2021-08-21 00:00:00
2021-08-24 00:00:00
2021-08-27 00:00:00
2021-08-30 00:00:00
2021-09-02 00:00:00
2021-09-05 00:00:00
2021-09-08 00:00:00
2021-09-11 00:00:00
2021-09-14 00:00:00
2021-09-17 00:00:00
2021-09-20 00:00:00
2021-09-23 00:00:00
2021-09-26 00:00:00
2021-09-29 00:00:00
2021-10-02 00:00:00
2021-10-05 00:00:00
2021-10-08 00:00:00
2021-10-11 00:00:00
2021-10-14 00:00:00
2021-10-17 00:00:00
2021-10-20 00:00:00
2021-10-23 00:00:00
2021-10-26 00:00:00

第一个想法:不要写长而复杂的代码行。 将事物分成有意义的变量。 这将更容易调试、理解并且工作得更快。 其次, rangestartrange第一个参数)到end (第二个参数)一个接一个地迭代。 range还具有第三个参数step ,您需要将其设置为使用给定步骤进行迭代:

start_date = datetime.strptime(date, "%Y-%m-%d %H:%M:%S")
start = step = int(_ruccerenceList[2])
days = _endDate - datetime.strptime(date, "%Y-%m-%d %H:%M:%S")).days

date_array = (start_date + dt.timedelta(days=x) for x in range(start, days, step))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM