如何从特定日期格式中减去一个月?
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"))
我正在尝试设置一个函数,该函数从特定日期格式中减去月份作为参数,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"))