Seite 1 von 1

Tage bis zu einem Geburtstag

Verfasst: Dienstag 11. Oktober 2022, 11:35
von Loster_Paddel
Hey,
ich möchte ein Programm schreiben, welches den nächsten Geburtstag für mich herausfindet. Hier stehe ich gerade da auf dem Schlauch, dass wenn ich das heutige Datum mit irgendeinem Geburtstag subtrahiere, es natürlich keinen Sinn ergibt, wenn ich irgendeie Jahreszahl von vor 20 Jahren eingetragen habe und Zahlen über 6000 rauskommen.

Hier ein Code zum Verständnis, was ich meine:

Code: Alles auswählen

import datetime

bday = datetime.date(2005,10,13)
heute = datetime.date.today()
diff = bday - heute
print(diff.days)
Zudem will ich ja keien Minusszahl rausbekommen. Das würde ja wenig Sinn ergeben.
Ich wäre dankbar, wenn mir jemand wieder auf die richtige Spur helfen könnte

Re: Tage bis zu einem Geburtstag

Verfasst: Dienstag 11. Oktober 2022, 12:00
von Sirius3
Der nächste Geburtstag ist ja entweder am selben Tag in diesem Jahr oder eben im nächsten Jahr, je nachdem ob Du dieses Jahr schon Geburtstag hattest, ergo mußt Du das Jahr entsprechend ersetzen.

Re: Tage bis zu einem Geburtstag

Verfasst: Dienstag 11. Oktober 2022, 12:14
von nezzcarth
Es gibt in Python die Möglichkeit, sich den Tag im aktuellen Kalender als eine Zahl zwischen 1 und 366 ausgeben zu lassen (https://docs.python.org/3/library/time. ... truct_time). Du kannst das Datumsobjekt für den Geburtstag zunächst auf das aktuelle Jahr setzen. Wenn "Tagesnummern" gleich sind, hast du heute Geburtstag, wenn die für heute niedriger ist, steht dein Geburtstag im aktuellen Jahr noch bevor. Wenn die für den Geburtstag niedriger ist als für den heutigen Tag, erhöhst du das Jahr des Geburstags um 1. Anschließend bestimmst du für die beiden letztgenannten Fälle die Differenz der Datumsobjekte.

Re: Tage bis zu einem Geburtstag

Verfasst: Dienstag 11. Oktober 2022, 14:09
von imonbln
Vielleicht ungefähr so, du warst doch schon fast am Ziel:

Code: Alles auswählen

import datetime

def days_til_bday(bday):
    today = datetime.date.today()
    diff = bday.replace(year=today.year) - today
    if diff.days < 0:
        diff = bday.replace(year=today.year + 1) - today
    return diff.days


def main():
    days = days_til_bday(datetime.date(2005,10,13))
    print(f" nächster Geburstag in {days} Tagen")

    days2 = days_til_bday(datetime.date(2005,7,13))
    print(f" nächster Geburstag in {days2} Tagen")


if __name__ == '__main__':
    main()

Re: Tage bis zu einem Geburtstag

Verfasst: Dienstag 11. Oktober 2022, 23:05
von __blackjack__
Bei einer allgemeinen Funktion, oder überhaupt wenn es nicht um einen festen Geburtstag geht, sollte man schauen ob das auch für Leute funktioniert die am 29.2. Geburtstag haben. 🎂

Re: Tage bis zu einem Geburtstag

Verfasst: Freitag 14. Oktober 2022, 19:54
von Loster_Paddel
Und schon habe ich ein neues Problem. Ich habe die Geburtstage in einem String und möchte sie zu einem Datum umwandeln. Dabei entsteht ein Fehler, den ich nicht ganz nachvollziehen kann.

Code: Alles auswählen

from datetime import datetime

bday = "2003.05.27"

new_bday = datetime.strptime(bday, "%Y-%m-%d")
print(new_bday)
Mein angegebener Geburtstag entspricht doch volle Kanne dem Format oder nicht?

Re: Tage bis zu einem Geburtstag

Verfasst: Freitag 14. Oktober 2022, 21:20
von __blackjack__
@Loster_Paddel: Nee, tut es nicht.

Code: Alles auswählen

In [22]: "." == "-"
Out[22]: False

Re: Tage bis zu einem Geburtstag

Verfasst: Samstag 15. Oktober 2022, 11:47
von Loster_Paddel
:roll: Solche Fehler hasse ich ja. Vielen Dank!