Python - ValueError: la hora debe estar en 0..23

CorePress2024-01-25  88

Estoy trabajando en crear un sistema para una biblioteca en Python. Actualmente estoy trabajando en una función que probará si el usuario tiene libros vencidos, pero recibo el error ValueError: la hora debe ser entre 0..23.

Dict "usuarios":

users = {
    "djoh01": {
        "password": "johndoe1",
        "books": [{"duedate": {"year": 2021, "month": 1, "day": 4}}],
    }
}

Python:


def checkMissingBooks(username):
    global users
    try:
        books = users[username]["books"]  # get users book list
    except:  # error getting list of books
        return False  # they have never checked out a book as the list can not be found
    for book in books:
        if (
            datetime.time(
                book["duedate"]["year"],
                book["duedate"]["month"],
                book["duedate"]["day"],
            )
            < datetime.date.today()
        ):
            return True

¿Cómo puedo hacer que esto funcione?

3

¿Por qué estás intentando construir un datetime.time a partir de un año, mes y fecha? ¿Quizás quieras datetime.date?

- Samsagaz

28/03/2021 a las 17:41



------------------------------------

Está buscando una hora (con una hora entre 00 y 23) desde que estás usando datetime.time. Quieres usar datetime.date en su lugar.

...
if datetime.date(book["duedate"]["year"], book["duedate"]["month"], book["duedate"]["day"]) < datetime.date.today():
      return True

devuelve True con su función para el nombre de usuario "djoh01".



------------------------------------

datetime.time devuelve la hora, use datetime.date en su lugar, consulte fecha y hora, como:

....
if datetime.time(book["duedate"]["year"], book["duedate"]["month"], book["duedate"]["day"]) < datetime.date.today():

1

Aceptaré esto como respuesta tan pronto como stackoverflow me lo permita.

- UCYT5040

28/03/2021 a las 17:45

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare