DevTrain Startseite Advanced Developers Conference vom 14.-15. Februar 2011  
  
  
SUCHEN:  
ARTIKEL ONLINE: 525   

Kategorien
.NET
Datenbanken
Web
XML

Allgemein
Camp
Foren
Events
Persönliche Einstellungen
Registrieren
Prämien Shop
Kontakt
Impressum
Über DevTrain

Autoren


   Autor: Till Groos Artikel Drucken
        
Wie alt bist du? Die Lösung mit DateTime und mit DateDiff

Aufgabe:

Errechnen des Alters in Jahren, Monaten und Tagen. Hört sich im den ersten Augenblick trivial an, ganz so einfach ist es aber nicht. Probieren wir's erst einmal mit den Boardmitteln des .NET Frameworks, hier mit der DateTime-Struktur. Die gibt uns die Jahres- Monats- und Tageskomponenten eines Datums. Mit ein bisschen überlegen kommt man auf folgendes:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
     Dim dateNow As DateTime = DateTime.Today heute
     Dim dateGeb As DateTime = Me.DateTimePicker1.Value 'das datum aus dem DateTimePicker
     Dim jahre, monate, tage As Integer 'ausgabe variablen
     Dim gebJahr, gebMonat, gebTag As Integer 'speichern das geburtsdatum
     Dim jetztJahr, jetztMonat, jetztTag As Integer 'speichern das heutige datum
     gebJahr = dateGeb.Year 'geburtsjahr
     gebMonat = dateGeb.Month 'geburtsmonat
     gebTag = dateGeb.Day 'geburtstag
     jetztJahr = dateNow.Year 'aktuelles jahr
     jetztMonat = dateNow.Month 'aktueller monat
     jetztTag = dateNow.Day 'aktueller tag
     If gebJahr <= jetztJahr Then 'wenn älter als 1 jahr
         If gebMonat <= jetztMonat Then 'und hatte schon geburtstag oder hat diesen monat
             jahre = jetztJahr - gebJahr
             monate = jetztMonat - gebMonat
         Else 'hat in diesem jahr noch geburtstag
             If Not gebJahr = jetztJahr Then 'aber nicht in diesem jahr (wäre falsches datum)
                 jahre = jetztJahr - gebJahr - 1
                 monate = jetztMonat + 12 - gebMonat
             Else
                 MessageBox.Show("Falsches Geburtsdatum. Du bist noch nicht geboren.", "Fehler") 'falsches datum
                 Exit Sub 'abbrechen
             End If
         End If
         If gebTag <= jetztTag Then 'hat an einem tag kleiner oder gleich den heutigen
             tage = jetztTag - gebTag
         Else ' hat an einem tag größer als dem heutigen
             monate -= 1
             If monate < 0 Then
                 jahre -= 1
                 monate = 12 + monate
             End If
             tage = jetztTag + DateTime.DaysInMonth(gebJahr, gebMonat) - gebTag
         End If
     Else 'falsche eingabe, datum liegt in der zukunft
         MessageBox.Show("Falsches Geburtsdatum. Du bist noch nicht geboren.", "Fehler")
         Exit Sub 'abbrechen
     End If
     MessageBox.Show("Du bist " & jahre & " Jahre, " & monate & " Monate und " & tage & " Tage alt", "Ausgabe")
End Sub

Ganz schön viel Code. Einfacher geht es, importiert man den Namespace Microsoft.VisualBasic und benutzt die DateDiff-Funktion:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim dateNow As DateTime = DateTime.Now
    Dim jahre, monate, tage
    Dim dateGeb As DateTime = Me.DateTimePicker1.Value
    If Not dateGeb > dateNow Then
        jahre = DateDiff(DateInterval.Year, dateGeb, dateNow) 'die Jahre
        dateNow = dateNow.AddYears(-jahre) 'abziehen der Jahre
        monate = DateDiff(DateInterval.Month, dateGeb, dateNow) 'monate
        If monate < 0 Then 'wird negativ, wenn monat noch ist
            monate = 12 + monate
            jahre -= 1
            dateNow = dateNow.AddYears(1)
        End If
        dateNow = dateNow.AddMonths(-monate) 'monate abziehen
        tage = DateDiff(DateInterval.Day, dateGeb, dateNow) 'tage
        If tage < 0 Then 'wird negativ, wenn tag noch ist
            tage = DateTime.DaysInMonth(dateNow.Year, dateNow.Month) + tage
            monate -= 1
        End If
        MessageBox.Show("Du bist " & jahre & " Jahre, " & monate & " Monate und " & tage & " Tage alt!")
    Else
        MessageBox.Show("Werd' erst mal Geboren, dann sehen wir weiter...")
    End If
End Sub

Einziger Unterschied:
Letzters Beispiel rechnet den heutigen Tag mit!
Das wäre mit C# nicht so einfach gewesen!

Ich bin offen für Verbesserungsvorschläge, falls jemand welche hat (auch in C#)!


DevTrain Camp - Schneller zum .NET 3.5 Developer
 
Verwandte Artikel      Verlinkte Dokumente
    Keine verknüpften Dokumente
    Keine Links vorhanden

  Erfasst am: 23.09.2003
  Gültig bis: 22.12.2003
8 Ratings
Bewertung: 47,5%
schlecht    sehr gut  

 
© Copyright 2007 ppedv AG