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.
Re: Tage bis zu einem Geburtstag
Verfasst: Samstag 15. Oktober 2022, 11:47
von Loster_Paddel

Solche Fehler hasse ich ja. Vielen Dank!