AttributeError:'datetime.timedelta'对象没有属性'strftime'

问题描述 投票:0回答:2

我正在自学如何用 Python 编码。

我正在尝试编写一个“计算器”来计算我需要工作多少小时/天才能购买产品。我收到此错误,但不知道如何修复它:

  File "D:\---\---\---\code.py", line 21, in <module>
    print("Para comprar um produto de " + str(preco) + " tem de trabalhar durante " + str(resultado.strftime("%d dias, %H horas e %M minutos.")))
AttributeError: 'datetime.timedelta' object has no attribute 'strftime'

完整代码如下:

import datetime

while True:
    questao = input("Quer calcular em horas ou em dias?\nH ou D: ") 
    if questao == "H":
        salario = float(input("\nQuanto ganha por hora? "))
        preco = float(input("Quanto custa o produto? "))
        divisão = preco/salario
        resultado = datetime.timedelta(hours=divisão)
        break
    elif questao == "D":
        salario = float(input("\nQuanto ganha por dia? "))
        preco = float(input("Quanto custa o produto? "))
        divisão = preco/salario
        resultado = datetime.timedelta(days=divisão)
        break
    else:
        print("Inseriu algo que não existe, tente novamente!\n")
        continue

print("Para comprar um produto de " + str(preco) + " tem de trabalhar durante " + str(resultado.strftime("%d dias, %H horas e %M minutos.")))

有人可以帮我解决这个问题吗?谢谢:)

python attributeerror
2个回答
1
投票

您可以从 timedelta 和秒中获取 .days 值。与其他日期时间对象不同,使用 .hour 不起作用。然后对秒进行数学运算,得到小时和分钟。如果更容易的话,您也可以将其转换为字符串。

preco = 1000
salario = 6
divisão = preco / salario
resultado = datetime.timedelta(hours=divisão)  # 6 days, 22:40:00
print(str(resultado))
# 6 days, 22:40:00

days = resultado.days
seconds = resultado.seconds

hours = seconds//3600
minutes = (seconds//60) % 60

print(str(days), 'dias', str(hours), 'horas e', str(minutes), 'minutos.')
# 6 dias 22 horas e 40 minutos.

0
投票

如果你想格式化 YYYY:MM:DD:HH:MM:SS 那么这个代码只需复制粘贴

def format_timedelta(td): # 计算组件 天数=abs(td.天数) 分钟、秒 = divmod(td.seconds, 60) 小时,余数 = divmod(分钟, 60)

# Calculate years and months
years, days_in_year = divmod(days, 365)
months, days_in_month = divmod(days_in_year, 30)

# Create the formatted string
formatted_string = (
    "{year:02d}:{month:02d}:{day:02d}:{hour:02d}:{min:02d}:{sec:02d}".format(
        year=abs(int(years)),
        month=int(months),
        day=int(days_in_year),
        hour=int(hours),
        min=int(remainder),
        sec=int(seconds),
    )
)

return formatted_string
© www.soinside.com 2019 - 2024. All rights reserved.