如何从特定日期格式中减去一个月?

How to subtract a month from an specific date format?

我正在尝试设置一个函数,该函数从特定日期格式中减去月份作为参数,returns 一个具有相同特定日期格式的日期,

此参数由今天的月份和年份给出:01/%m/%Y

实际代码:

from datetime import datetime
import dateutil.relativedelta

actual_date = datetime.now()
actual_date = "{}/{}/{}".format('01', actual_date.month, actual_date.year)


def set_date(actual_date):
    print(actual_date - dateutil.relativedelta.relativedelta(months=1))

这是测试 set_date() 时的输出:

set_date(actual_date)

TypeError: unsupported operand type(s) for -: 'str' and 'relativedelta'

预期输出应如下所示:

01/12/2020

你的顺序错了。先进行日期计算,转成字符串

now = datetime.now()
one_month_ago = now - dateutil.relativedelta.relativedelta(months=1)
print("{}/{}/{}".format('01', one_month_ago.month, one_month_ago.year))

在第一行中,您得到一个 datetime,然后在第二行中您从中构建一个 string。结果,在 set_date 中你得到了提到的错误。

我建议您删除第二行,只需将 datetime object 赋给 set_date,然后对结果执行 strftime

actual_date = datetime.now()

def set_date(actual_date):
    result = actual_date - dateutil.relativedelta.relativedelta(months=1)
    print(datetime.strftime(result, "01/%m/%Y"))

但是,如果您真的想保留这些转化,您可以使用 strptime

actual_date = datetime.now()
actual_date = datetime.strptime("{}/{}/{}".format('01', actual_date.month, actual_date.year), "%d/%m/%Y")


def set_date(actual_date):
    result = actual_date - dateutil.relativedelta.relativedelta(months=1)
    print(datetime.strftime(result, "%d/%m/%Y"))