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

时间:2021-07-30 09:55:43

标签: python

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

它们都是我从 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 天。

知道如何解决吗?

2 个答案:

答案 0 :(得分:1)

第一个想法:不要写长而复杂的代码行。将事物分成有意义的变量。这将更容易调试、理解并且工作得更快。其次,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))

答案 1 :(得分: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
相关问题