【发布时间】:2021-12-15 23:55:43
【问题描述】:
我需要检查给定日期是否正好是从今天开始的一个月前,例如,如果今天是 2021 年 11 月 1 日,那么正好一个月前就是 2021 年 10 月 1 日(不完全是 30 天。)
我写了一段代码,效果很好
today = fields.Date.from_string(fields.Date.today())
if today.month == 1:
one_month_ago = today.replace(year=today.year - 1, month=12)
else:
extra_days = 0
while True:
try:
one_month_ago = today.replace(month=today.month - 1, day=today.day -
extra_days)
break
except ValueError:
extra_days += 1
if one_month_ago == given_date:
# do something
else:
# do something
它可以很好地处理所有情况,但处理不当。例如,给定的日期是 2021 年 3 月 31 日,今天的日期是 2021 年 4 月 30 日,而 2021 年 4 月 31 日将不会来比较。我需要我的代码每天运行并检查一些东西。它还错误地处理了 1 月 29 日至 31 日的案例,因为 2 月 29 日至 31 日的情况无法进行比较。
【问题讨论】:
-
您必须添加一些逻辑来处理前一个月天数较少的所有月份,这显然取决于您决定如何处理它们。你想在 3 月 31 日 29 日/30 日发生什么,因为没有 2 月 30 日/31 日,而且大多数年份都没有 2 月 29 日。
-
什么是“一个月前”? 12月31日? 3月29日?闰年的 3 月 29 日?
-
@Grismar 恰好一个月前的 12 月 31 日将是 11 月 30 日,3 月 29 日将是 2 月 28 日,而在闰年,它将是 2 月 29 日。
-
@balmy 这正是我想要处理的。我知道所有可能发生的缺失日期,我不想单独处理每个案例,因为我仍然会错过一些东西。即使一个案例处理不当,也可能导致问题。
-
所以你有了逻辑,现在将它添加到你的代码中。或者你希望有人会为你写吗?如果是这样,请注意 StackOverflow 不是 代码编写服务。您已经在处理前一年的 1 月 - 继续编写类似的测试和调整,为您需要调整的几个月。
标签: python python-3.x datetime python-datetime