Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Υπολογισμός ηλικίας

Îåêßíçóå áðü ôï ìÝëïò Dark Dominion. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 23-12-2006, 16:24. Υπάρχουν 10 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  16-12-2006, 16:15 22351

    Υπολογισμός ηλικίας

    Έχω ένα DateTimePicker με το οποίο ο χρήστης επιλέγει την ημερομηνία γέννησης του. Θέλω να φαίνεται η ηλικία του σε έτη και μήνες αφού πρώτα έχει επιλέξει την ημερομηνία γέννησης του. Ο κώδικας που έχω γράψει είναι ο εξής:

        Private Sub DtpDate_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DtpDate.ValueChanged
            Dim UserInputDate As Date
            Dim diff As TimeSpan = DateTime.Now - UserInputDate
            Dim theDate As New DateTime(diff.Ticks)
            Me.LblAgeShow.Text = theDate.ToString("dd MMM yyyy")
        End Sub


    Μόλις επιλέξω μία ημερομηνία γέννησης, μου εμφανίζει τη σημερινή ημερομηνία. Τι αλλαγή χρειάζεται να κάνω στο κώδικα έτσι ώστε να μου εμφανίζει την ηλικία σε έτη και μήνες;

    Κουλούρης Θάνος
  •  16-12-2006, 17:27 22354 σε απάντηση της 22351

    Απ: Υπολογισμός ηλικίας

    Δεν δίνεις τιμή στην μεταβλητή UserInputDate. Προφανώς μετά τον ορισμό πρέπει να γράψεις UserInputDate = DtpDate.Value
    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  16-12-2006, 17:41 22356 σε απάντηση της 22351

    Απ: Υπολογισμός ηλικίας

    Οκ, τώρα διαλέγω σαν ημερομηνία γένησης τη δικιά μου (24/9/84) και μου λέει στην ετικέτα 25 Μαρτίου 0023. Χρειάζεται κάποια αλλαγή στην μετατροπή της μεταβλητής theDate σε string;
    Κουλούρης Θάνος
  •  16-12-2006, 17:54 22357 σε απάντηση της 22351

    Smile [:)] Απ: Υπολογισμός ηλικίας

    Χρειάζεσαι να εργαστείς με Time span, άρα:

     



            Dim myBirthDay As Date = System.Convert.ToDateTime("24/9/84")
            Dim difference As TimeSpan = Date.Now - MyBirthDay

            Dim differenceInDays As Double = difference.TotalDays
            Dim differenceInHours As Double = difference.TotalHours
            Dim differenceInMinutes As Double = difference.TotalMinutes

    Αυτά.

     


    while (!dead) learn();
  •  17-12-2006, 15:23 22392 σε απάντηση της 22351

    Απ: Υπολογισμός ηλικίας

    Και πως εμφανίζεται η διαφορά στο label, θέλει κάποια μετατροπή;

    Κουλούρης Θάνος
  •  17-12-2006, 15:58 22394 σε απάντηση της 22351

    Απ: Υπολογισμός ηλικίας

    differenceInDays.ToString
    while (!dead) learn();
  •  17-12-2006, 16:03 22396 σε απάντηση της 22351

    Απ: Υπολογισμός ηλικίας

    Δυστυχώς, δεν αρκεί η χρήση ενός TImeSpan καθώς το TimeSpan μετράει ημέρες, ενώ εμείς θέλουμε χρόνια, σωστό υπολογισμό δίσεκτων ετών κλπ. Θα πρέπει να χρησιμοποιησεις τον τρόπο υπολογισμού της ηλικίας που μαθαίναμε στο Δημοτικό: Διαφορά ημερών, μηνών και ετών, μεταφορά υπολοίπου κλπ.

    Ένας γρήγορος υπολογισμός των ετών υπάρχει στο Developerfusion:



    <FONT face="Courier New">' get the difference in years
    Dim years As Integer = DateTime.Now.Year - BirthDate.Year
    ' subtract another year if we're before the
    ' birth day in the current year
    If DateTime.Now.Month < BirthDate.Month Or (DateTime.Now.Month = BirthDate.Month And DateTime.Now.Day < BirthDate.Day) Then
        years = years - 1
    End If</FONT>


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  17-12-2006, 19:43 22403 σε απάντηση της 22351

    Απ: Υπολογισμός ηλικίας

    Δες και αυτό το link


    while (!dead) learn();
  •  20-12-2006, 11:43 22555 σε απάντηση της 22351

    Απ: Υπολογισμός ηλικίας

     pkanavos wrote:

    Δυστυχώς, δεν αρκεί η χρήση ενός TImeSpan καθώς το TimeSpan μετράει ημέρες, ενώ εμείς θέλουμε χρόνια, σωστό υπολογισμό δίσεκτων ετών κλπ. Θα πρέπει να χρησιμοποιησεις τον τρόπο υπολογισμού της ηλικίας που μαθαίναμε στο Δημοτικό: Διαφορά ημερών, μηνών και ετών, μεταφορά υπολοίπου κλπ.

    Ένας γρήγορος υπολογισμός των ετών υπάρχει στο Developerfusion:



    <font face="Courier New">' get the difference in years
    Dim years As Integer = DateTime.Now.Year - BirthDate.Year
    ' subtract another year if we're before the
    ' birth day in the current year
    If DateTime.Now.Month < BirthDate.Month Or (DateTime.Now.Month = BirthDate.Month And DateTime.Now.Day < BirthDate.Day) Then
        years = years - 1
    End If</font>



    Αυτό όμως μήπως υπολογίζει μόνο τα χρόνια σε μορφή Integer;

    Edit:

    Ο χρήστης θα επιλέγει μια ημερομηνία απο το DateTimePicker και θα εμφανίζεται αυτομάτως η ηλικία του σε χρόνια και μήνες στην ετικέτα που βρίσκεται κάτω ακριβώς από το DateTimePicker. Για να μη μπερδεύεστε για το τι ακριβώς θέλω παραθέτω μια εικόνα του προγράμματος.





    Κουλούρης Θάνος
  •  23-12-2006, 16:08 22741 σε απάντηση της 22351

    Απ: Υπολογισμός ηλικίας

    Η λύση τελικά είναι η εξής για όποιον ενδιαφέρεται:

    Dim NowYear As Integer = Now().Year

    Dim NowMonth As Integer = Now().Month

    Dim NowDay As Integer = Now().Day

    Dim BirthYear As Integer = DtpDate.Value.Year

    Dim BirthMonth As Integer = DtpDate.Value.Month

    Dim BirthDay As Integer = DtpDate.Value.Day

    Dim LastYear As Integer = NowYear - 1

    Dim LastMonth As Integer = NowMonth - 1

    Dim LastMonthDays As Integer

    Dim Years As Integer

    Dim Months As Integer

    Dim Days As Integer

    Select Case LastMonth

    Case 0

    LastMonthDays = 31

    LastYear -= 1

    Case 1

    LastMonthDays = 31

    Case 2

    If NowYear Mod 4 = 0 Then

    LastMonthDays = 29

    Else

    LastMonthDays = 28

    End If

    Case 3

    LastMonthDays = 31

    Case 4

    LastMonthDays = 30

    Case 5

    LastMonthDays = 31

    Case 6

    LastMonthDays = 30

    Case 7

    LastMonthDays = 31

    Case 8

    LastMonthDays = 31

    Case 9

    LastMonthDays = 30

    Case 10

    LastMonthDays = 31

    Case 11

    LastMonthDays = 30

    Case 12

    LastMonthDays = 31

    End Select

    If NowDay < BirthDay Then

    NowDay += LastMonthDays

    NowMonth -= 1

    End If

    Days = NowDay - BirthDay

    Months = NowMonth - BirthMonth

    If Months < 0 Then

    NowYear -= 1

    Months += 12

    End If

    Years = NowYear - BirthYear

    LblAgeShow.Text = "Years: " & Years & " Months: " & Months & " Days: " & Days


    Κουλούρης Θάνος
  •  23-12-2006, 16:24 22742 σε απάντηση της 22351

    Απ: Υπολογισμός ηλικίας

    Ο υπολογισμός του δίσεκτου δεν είναι τόσο απλός. Δεν θυμάμαι τις λεπτομέρειες, αλλά νομίζω ότι ανά 100 χρόνια δεν είναι αλλά ανά 400 είναι? Πάντως μπορείς να χρησιμοποιήσεις την Calendar.IsLeapYear για να το βρεις και την Calendar.GetDaysInMonth για να βρεις τις ημέρες κάθε μήνα. Θα γλυτώσεις έτσι το case
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems