我在从开始日期和结束日期正确循环时遇到问题。
它们都是我从 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 天。
知道如何解决吗?
答案 0 :(得分:1)
第一个想法:不要写长而复杂的代码行。将事物分成有意义的变量。这将更容易调试、理解并且工作得更快。其次,range
从 start
(range
的第一个参数)到 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_string
、end_string
和 delta_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