【问题标题】:How to subtract a month from an specific date format?如何从特定日期格式中减去一个月?
【发布时间】:2021-01-15 17:01:03
【问题描述】:

我正在尝试设置一个函数,从特定日期格式中减去一个月作为参数,并以相同的特定日期格式返回日期,

此参数由今天的月份和年份给出: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

【问题讨论】:

    标签: python function date datetime python-dateutil


    【解决方案1】:

    您的操作顺序错误。先进行日期计算,然后然后转换成字符串。

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

    【讨论】:

    • 也可以使用strftime
    【解决方案2】:

    在第一行,你得到一个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"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-08
      • 1970-01-01
      • 2022-12-14
      • 1970-01-01
      • 2020-11-15
      • 1970-01-01
      相关资源
      最近更新 更多