用Python从日期中减去一个月?

用Python从日期中减去一个月?,python,datetime,Python,Datetime,我需要从任何日期得到上个月的第一天。 我知道我可以使用monthdelta(datetime(2010,3,30),-1)获取上个月的数据,但它不会在第一天返回 试试这个: from datetime import date d = date.today() d.replace( year=d.year if d.month > 1 else d.year - 1, month=d.month - 1 if d.month > 1 else 12, day=1

我需要从任何日期得到上个月的第一天。 我知道我可以使用
monthdelta(datetime(2010,3,30),-1)
获取上个月的数据,但它不会在第一天返回

试试这个:

from datetime import date
d = date.today()
d.replace(
    year=d.year if d.month > 1 else d.year - 1,
    month=d.month - 1 if d.month > 1 else 12,
    day=1
)

这可以通过首先计算当前月份的第一天(或任何给定的日期)来完成,然后用datetime.timedelta(days=1)减去它,这将给出上个月的最后一天

为了演示,下面是一个示例代码:

import datetime

def get_lastday(current):
    _first_day = current.replace(day=1)
    prev_month_lastday = _first_day - datetime.timedelta(days=1)
    return prev_month_lastday.replace(day=1)

像这样试试。使用
datetime
datetutil

(如果
datetutil
不适用于您安装
pip安装python dateutil

输入:

datetime.date(2016, 7, 5)
输出

datetime.date(2016, 6, 1)

为什么不
datetime(2010,3-1,1)
?因为我有很多日期
2016-05-13 19:05:382016-06-18 19:05:462016-06-12 19:06:462016-03-13 19:07:042016-02-13 19:09:592016-09-13 19:11:11
,到目前为止,我都想得到上个月的第一天投票,因为当前的答案给出的是上个月的最后一天,不是first@donkopotamus谢谢你指出,我犯了一个错误。我编辑了这篇文章。如果当前月份是一月,这个方法有效吗?我尝试
df['used_at']>dates[I]。替换(month=date.month-1,day=1)
但是作为回报,只有一天那么一年呢?是的,很好;)请注意,年份问题已修复。3年后,我不确定自己是否做过。我尝试了
df['used_at']>(dates[I]-dateutil.relativedelta.relativedelta(months=1)).replace(day=1)
但它返回
TypeError:replace()得到了一个意外的关键字参数'day'
,在此之前我尝试了
df['used_at']>dates[I]。replace(month=date.month-1,day=1)
但是它只返回一天,我认为你在尝试不同的事情。
df['used_at']>(dates[i]-dateutil.relativedelta.relativedelta(months=1)).replace(day=1)
试试这个方法。我之前写过它,它返回
TypeError:replace()得到一个意外的关键字参数“day”
datetime.date(2016, 6, 1)