Δεδομένου ενός DateTime
που αντιπροσωπεύει τα γενέθλια ενός ατόμου, πώς μπορώ να υπολογίσω την ηλικία του σε έτη;
Μια εύκολη στην κατανόηση και απλή λύση.
// Save today's date.
var today = DateTime.Today;
// Calculate the age.
var age = today.Year - birthdate.Year;
// Go back to the year the person was born in case of a leap year
if (birthdate.Date > today.AddYears(-age)) age--;
Ωστόσο, αυτό προϋποθέτει ότι αναζητάτε τη δυτική ιδέα της ηλικίας και δεν χρησιμοποιείτε Ανατολική Ασιατική αναγωγή.
Μια άλλη λειτουργία, όχι από μένα, αλλά την βρήκα στο διαδίκτυο και την τελειοποίησα λίγο:
public static int GetAge(DateTime birthDate)
{
DateTime n = DateTime.Now; // To avoid a race condition around midnight
int age = n.Year - birthDate.Year;
if (n.Month < birthDate.Month || (n.Month == birthDate.Month && n.Day < birthDate.Day))
age--;
return age;
}
Απλά δύο πράγματα που μου έρχονται στο μυαλό: Τι γίνεται με τους ανθρώπους από χώρες που δεν χρησιμοποιούν το γρηγοριανό ημερολόγιο; Το DateTime.Now είναι στην κουλτούρα του συγκεκριμένου διακομιστή νομίζω. Έχω απολύτως 0 γνώσεις σχετικά με την πραγματική εργασία με ασιατικά ημερολόγια και δεν ξέρω αν υπάρχει εύκολος τρόπος να μετατρέψεις ημερομηνίες μεταξύ ημερολογίων, αλλά σε περίπτωση που αναρωτιέσαι για τους Κινέζους από το έτος 4660 :-)
Ο καλύτερος τρόπος που γνωρίζω, λόγω των δίσεκτων ετών και όλων αυτών, είναι:
DateTime birthDate = new DateTime(2000,3,1);
int age = (int)Math.Floor((DateTime.Now - birthDate).TotalDays / 365.25D);
Ελπίζω αυτό να βοηθάει.