Tage bis zu einem Geburtstag

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Loster_Paddel
User
Beiträge: 39
Registriert: Samstag 16. April 2022, 20:31

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
Sirius3
User
Beiträge: 18278
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
nezzcarth
User
Beiträge: 1765
Registriert: Samstag 16. April 2011, 12:47

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.
imonbln
User
Beiträge: 191
Registriert: Freitag 3. Dezember 2021, 17:07

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()
Benutzeravatar
__blackjack__
User
Beiträge: 14076
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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. 🎂
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Loster_Paddel
User
Beiträge: 39
Registriert: Samstag 16. April 2022, 20:31

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?
Benutzeravatar
__blackjack__
User
Beiträge: 14076
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Loster_Paddel: Nee, tut es nicht.

Code: Alles auswählen

In [22]: "." == "-"
Out[22]: False
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Loster_Paddel
User
Beiträge: 39
Registriert: Samstag 16. April 2022, 20:31

:roll: Solche Fehler hasse ich ja. Vielen Dank!
Antworten