在python中从当前日期查找上个月的开始和结束日期

在python中从当前日期查找上个月的开始和结束日期,python,python-3.x,datetime,Python,Python 3.x,Datetime,我需要从当前日期查找上个月的开始和结束日期 如果当前日期为2021年2月3日 开始日期应为01-Jan-2021,结束日期应为31-Jan-2021 如何做到这一点,因为每个月都有不同的天数?datetime中是否有任何函数可以实现这一点?第一个日期始终是第一个日期 # month_date = (datetime.now() - timedelta(days=20)) month_date = datetime.now().replace(day= monthrange(month_date.

我需要从当前日期查找上个月的开始和结束日期

如果当前日期为2021年2月3日

开始日期应为
01-Jan-2021
,结束日期应为
31-Jan-2021


如何做到这一点,因为每个月都有不同的天数?datetime中是否有任何函数可以实现这一点?

第一个日期始终是第一个日期

# month_date = (datetime.now() - timedelta(days=20))
month_date = datetime.now().replace(day= monthrange(month_date.year,month_date.month - 1)[1]).strftime("%Y/%m/%d")
start_date = month_date.strftime("%Y/%m/01")
end_date = month_date.replace(day= monthrange(month_date.year,month_date.month)[1]).strftime("%Y/%m/%d")
进口是

from datetime import datetime, timedelta
from calendar import monthrange

您可以为1月份添加一个条件,这样就需要12月份。如果对此有任何问题,请添加评论,我也会添加评论。

第一次约会总是第一次

# month_date = (datetime.now() - timedelta(days=20))
month_date = datetime.now().replace(day= monthrange(month_date.year,month_date.month - 1)[1]).strftime("%Y/%m/%d")
start_date = month_date.strftime("%Y/%m/01")
end_date = month_date.replace(day= monthrange(month_date.year,month_date.month)[1]).strftime("%Y/%m/%d")
>>> from datetime import date, timedelta
>>> this_first = date.today().replace(day=1)
>>> prev_last = this_first - timedelta(days=1)
>>> prev_first = prev_last.replace(day=1)
>>> prev_first, prev_last
(datetime.date(2021, 1, 1), datetime.date(2021, 1, 31))
进口是

from datetime import datetime, timedelta
from calendar import monthrange
您可以为1月份添加一个条件,这样就需要12月份。如果有任何问题,只要添加评论,我也会添加

>>> from datetime import date, timedelta
>>> this_first = date.today().replace(day=1)
>>> prev_last = this_first - timedelta(days=1)
>>> prev_first = prev_last.replace(day=1)
>>> prev_first, prev_last
(datetime.date(2021, 1, 1), datetime.date(2021, 1, 31))
根据需要设置格式


如果需要,请格式化。

您能提供您尝试过的代码和不适合您的代码吗?您可以将其自动化,但对于几个月来说,它们的天数总是相同的。不包括每四年一次的二月。考虑把它硬编码为最简单的解决方案?我列了一张字典清单({月份:天数)。然后我运行一个循环来查找日期。但我需要一个简短的方法。@Wiktoor Wut?您使用的日历是什么?所有月份的天数都相同?!@deceze与您的日历相同?例如,一月总是有31天,四月总是有30天。您能提供您尝试过的代码吗?哪些不适合您?您可以自动执行,但作为一个例子几个月来,他们总是有相同的天数。不包括二月每4年一次。考虑把它编码为最简单的解决方案吗?@ YehanKuZoVyyCH我尝试了漫长的过程。我制作了一个字典列表({月:不天)。。然后我运行一个循环来查找日期。但我需要一个简短的方法。@Wiktoor Wut?您使用的日历中所有月份的天数都相同?!@deceze与您的相同?例如,一月总是有31天,四月总是有30天。
-timedelta(days=20)
在每个月的21号之后找不到上一个月…因此,无论今天的日期是什么,您都可以-1该月。它将为您提供该月的开始和结束日期。您可以设置一些条件来获取您需要的该月的任何日期的第一个和最后一个日期。让我以这种方式编辑它。您尝试过您的代码吗?
name错误:name'month\u date'未定义
“因此,无论今天是什么日期,你都可以-1个月”-例如,在3月31日这将如何工作?@RajatTyagi它不工作。
-timedelta(天=20)
在每个月的21号之后找不到上一个月…因此,无论今天的日期是什么,您都可以-1该月。它将为您提供该月的开始和结束日期。您可以设置一些条件来获取您需要的该月的任何日期的第一个和最后一个日期。让我以这种方式编辑它。您尝试过您的代码吗?
name错误:name'month\u date'未定义
“因此,无论今天的日期是什么,你都可以-1个月”-例如,在3月31日,它将如何工作?@RajatTyagi,它不起作用。