用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)