Benutzer mit den meisten Antworten
Powershell Tage bis zum nächsten Geburtstag

Frage
-
Hallo, ich bin momentan in meiner Informatik Ausbildung und habe in der Schule ein SOL (Selbstorientiertes Lernen) Modul über Powershell, ich bin nicht schlecht dran aber ich habe ein Problem mit meinem Code den ihr unten sehen könnt, ich möchte indem ich meinen Geburtstag (04.08.2000) eingebe das es mir anzeigt wie viele Tage es noch dauert bis ich das nächste mal Geburtstag habe. (04.08.2018) Dies tut es schon aber nur wenn ich das Datum im Jahr 2018 eingebe und zwar folgendermassen: 08.04.2018. Ausserdem habe ich versucht das Programm robust zu machen damit es nicht abstürzt oder eine Fehlermeldung abgibt wenn ich ein nicht existierendes Datum/Buchstaben eingebe. Ich weiss das das Format des Datums nicht stimmt (siehe dritte Zeile) aber leider schaffe ich das robust machen nicht, wenn man ausserdem das Programm startet steht noch eine 0?
Kann mir hier jemand helfen wie ich meinen Auftrag umsetzen könnte? Bitte verständnisvoll erklären wenn möglich, Vielen Dank
#Clearing Clear-Host $cultureInfo = New-Object System.Globalization.CultureInfo('de-DE') #Kultur/Format ändern in Deutsch #initialisieren von Variabeln $geburtstag = Get-Date $datumvonheute = Get-Date $geburtstagstr = $geburtstag.ToString("ddMMyyyy") $ErrorActionPreference = "SilentlyContinue" $vondatum $bisdatum function ParseDate([string]$datumvonheute) { try{ $result = 0 if(!([datetime]::Parse($datumvonheute,$cultureInfo))) { throw "Es wurde ein falsches Datum eingegeben! $geburtstag" } $isok = $true $geburtstag = [datetime]::Parse($datumvonheute, $cultureInfo) #Korrektes Datum Parsen } catch { $result Write-Host "Falsche Eingabe!" $isok = $false } } do{ $geburtstag = Read-Host "Bitte geben Sie ihren Geburtstag ein [MM.DD.YYYY]" ParseDate($geburtstag) } until($isok = $true) $geburtstagstr = $geburtstag $vondatum = [DateTime] $datumvonheute $bisdatum = [DateTime] $geburtstag $total = ($bisdatum - $vondatum).Days Write-Output "Tage bis zu Ihrem nächsten Geburtstag: $total"
Antworten
-
ich finds ne gute Idee, anhand von ner einfachen Aufgabe grundsätzliche Techniken zu üben, auch wenn das Ergebnis dann vielleicht umständlich ist.
Es ist aber nicht so einfach wie behauptet. :)
Du musst erstmal rausfinden wann der nächste Geburtstag ist, also:- Geburtstag abfragen, aber bedenke du erhältst dann normalerweise den ersten Geburtstag des Users. Das Jahr interessiert dich für deine Zwecke aber gar nicht d.h. du benötigst nur Monat und Tag.
- Prüfen ob dieses Datum im aktuellen Jahr schon gewesen ist
- Falls ja, ziehst ziehst du das heutige Datum vom Geburtsdatum im nächsten Jahr ab
- Falls nein, ziehst ziehst du das heutige Datum vom Geburtsdatum im aktuellen Jahr ab
Die Fehlerbehandlung scheint aber zu funktionieren, du musst nur noch nach der Ausgabe "falsche Eingabe!" das Script auch abbrechen, oder noch besser dem User eine neue Eingabe ermöglichen.
Es ist übrigens nicht so gern gesehen in mehreren Foren zeitgleich zu posten, also entscheide dich bitte wo du dein Problem erörtert haben willst und schließe den anderen Thread.Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Code Manager v5: Link
(u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.- Bearbeitet Denniver ReiningMVP, Moderator Mittwoch, 21. März 2018 12:39
- Als Antwort markiert Wondaah Donnerstag, 22. März 2018 06:38
Alle Antworten
-
ich finds ne gute Idee, anhand von ner einfachen Aufgabe grundsätzliche Techniken zu üben, auch wenn das Ergebnis dann vielleicht umständlich ist.
Es ist aber nicht so einfach wie behauptet. :)
Du musst erstmal rausfinden wann der nächste Geburtstag ist, also:- Geburtstag abfragen, aber bedenke du erhältst dann normalerweise den ersten Geburtstag des Users. Das Jahr interessiert dich für deine Zwecke aber gar nicht d.h. du benötigst nur Monat und Tag.
- Prüfen ob dieses Datum im aktuellen Jahr schon gewesen ist
- Falls ja, ziehst ziehst du das heutige Datum vom Geburtsdatum im nächsten Jahr ab
- Falls nein, ziehst ziehst du das heutige Datum vom Geburtsdatum im aktuellen Jahr ab
Die Fehlerbehandlung scheint aber zu funktionieren, du musst nur noch nach der Ausgabe "falsche Eingabe!" das Script auch abbrechen, oder noch besser dem User eine neue Eingabe ermöglichen.
Es ist übrigens nicht so gern gesehen in mehreren Foren zeitgleich zu posten, also entscheide dich bitte wo du dein Problem erörtert haben willst und schließe den anderen Thread.Grüße, Denniver
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Code Manager v5: Link
(u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.- Bearbeitet Denniver ReiningMVP, Moderator Mittwoch, 21. März 2018 12:39
- Als Antwort markiert Wondaah Donnerstag, 22. März 2018 06:38
-
- Geburtstag abfragen, aber bedenke du erhältst dann normalerweise den ersten Geburtstag des Users. Das Jahr interessiert dich für deine Zwecke aber gar nicht d.h. du benötigst nur Monat und Tag.
- Prüfen ob dieses Datum im aktuellen Jahr schon gewesen ist
- Falls ja, ziehst ziehst du das heutige Datum vom Geburtsdatum im nächsten Jahr ab
- Falls nein, ziehst ziehst du das heutige Datum vom Geburtsdatum im aktuellen Jahr ab
Das könnte dann so ausschauen:
# Input $birthday = (Get-Date "29.01.2018") # Calculation $today = (Get-Date "00:00") if($birthday -lt $today){ $birthday = $birthday.AddYears(1) } $difference = ($birthday - $today).Days # Output Write-Host "Geburtstag in $difference Tagen"
- Bearbeitet TobyU Mittwoch, 21. März 2018 14:37
-
Das sollte ein Anstoß zum selbst denken und dabei was lernen sein...
:)
Blog: http://bytecookie.wordpress.com
Kostenloser Powershell Code Manager v5: Link
(u.a. Codesnippets verwalten + komplexe Scripte graphisch darstellen)
Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
Warum das Ganze? Hier gibts die Antwort.
- Bearbeitet Denniver ReiningMVP, Moderator Mittwoch, 21. März 2018 15:27