none
Powershell Tage bis zum nächsten Geburtstag RRS feed

  • 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"

    Mittwoch, 21. März 2018 10:20

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.

    Mittwoch, 21. März 2018 12:24
    Moderator

Alle Antworten

  • Wieso programmierst du so umständlich? Man kann das Problem in exakt 3 Zeilen lösen:

    1. Zeile: Geburtstag eingeben

    2. Zeile: Datum von heute bestimmen

    3. Zeile: Differenz bestimmen

    Man muss in PowerShell keine variablen initialisieren. 

    Mittwoch, 21. März 2018 11:21
  • 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.

    Mittwoch, 21. März 2018 12:24
    Moderator
  • - 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
    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.


    Mittwoch, 21. März 2018 15:26
    Moderator