如何解决如何从特定日期格式中减去一个月?
我正在尝试设置一个函数,该函数从特定日期格式中减去一个月作为参数,并以相同的特定日期格式返回一个日期,
这个参数由今天的月份和年份给出: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"))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。