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

CorePress2024-01-25  154

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