我需要能够在 python 中准确地找到两个日期之间的月份。我有一个可行的解决方案,但它不是很好(如优雅)或快速。
dateRange = [datetime.strptime(dateRanges[0], "%Y-%m-%d"), datetime.strptime(dateRanges[1], "%Y-%m-%d")]
months = []
tmpTime = dateRange[0]
oneWeek = timedelta(weeks=1)
tmpTime = tmpTime.replace(day=1)
dateRange[0] = tmpTime
dateRange[1] = dateRange[1].replace(day=1)
lastMonth = tmpTime.month
months.append(tmpTime)
while tmpTime < dateRange[1]:
if lastMonth != 12:
while tmpTime.month <= lastMonth:
tmpTime += oneWeek
tmpTime = tmpTime.replace(day=1)
months.append(tmpTime)
lastMonth = tmpTime.month
else:
while tmpTime.month >= lastMonth:
tmpTime += oneWeek
tmpTime = tmpTime.replace(day=1)
months.append(tmpTime)
lastMonth = tmpTime.month
所以只是为了解释一下,我在这里所做的是获取两个日期并将它们从 iso 格式转换为 python datetime 对象。然后我循环添加一个星期到开始日期时间对象并检查月份的数值是否更大(除非月份是十二月然后它检查日期是否更小),如果该值更大我将它附加到列表几个月并不断循环直到我到达我的结束日期。
它工作得很好,只是看起来不是一个好方法……
原文由 Joshkunz 发布,翻译遵循 CC BY-SA 4.0 许可协议
2018-04-20 更新: 似乎 OP @Joshkunz 要求查找两个日期之间有 _哪些月份_,而不是两个日期之间有“多少个月”。所以我不确定为什么@JohnLaRooy 被点赞超过 100 次。 @Joshkunz 在原始问题下的评论中表示他想要实际日期 [或月份],而不是找到 _总月数_。
所以看起来问题是想要的,在两个日期之间
2018-04-11
到2018-06-01
如果它介于
2014-04-11
到2018-06-01
之间怎么办?那么答案就是所以这就是为什么我多年前有以下伪代码的原因。它只是建议将两个月作为终点并循环遍历它们,一次增加一个月。 @Joshkunz 提到他想要“月份”,他还提到他想要“日期”,但不知道确切的情况,很难写出准确的代码,但想法是使用一个简单的循环来遍历端点,并且一个月递增一次。
8年前的2010年的答案:
如果增加一周,那么它大约可以完成所需工作量的 4.35 倍。为什么不只是:
现在只是伪代码,还没有测试,但我认为沿着同一条线的想法会奏效。