Search code examples
pythonattributeerror

AttributeError: 'datetime.timedelta' object has no attribute 'strftime'


I'm self-learning how to code in Python.

I'm trying to code a "Calculator" that calculates how many hours/days I need to work to buy a product. I got this error and don't know how to fix it:

  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'

Here is the entire code:

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.")))

Can someone help me fix this? Thanks :)


Solution

  • You can get the .days value from the timedelta, and the seconds. Unlike other datetime objects, using .hour doesn't work. Then do math on the seconds to get hours and minutes. You can also just convert it to string if that's easier.

    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.