2009-03-23 8 views
4

Wie kann ich das Alter von jemandem bekommen, der das Geburtsdatum in einem C# Datetime gegeben hat.Alter in Jahren mit dezimaler Genauigkeit bei einem Datetime

Ich mag ein genaues Alter wie 40,69 Jahre alt

+0

Wenn Sie in der „gegenüberliegenden“ Richtung interessiert sind (fraktionierte Jahre zu Tage/Termine Umwandlung) sehen: https://stackoverflow.com/questions/14859332/how-to-convert-fractional-years-say -1-25 Jahre bis zur Anzahl der Tage/45389987 # 45389987. –

Antwort

10

Dies wird das genaue Alter berechnen. Der Bruchteil des Alters wird relativ zur Anzahl der Tage zwischen dem letzten und dem nächsten Geburtstag berechnet, so dass Schaltjahre korrekt behandelt werden.

Der Bruchteil ist linear über das Jahr (und berücksichtigt nicht die unterschiedlichen Längen der Monate), was am sinnvollsten erscheint, wenn Sie ein Bruchalter angeben möchten.

// birth date 
DateTime birthDate = new DateTime(1968, 07, 14); 

// get current date (don't call DateTime.Today repeatedly, as it changes) 
DateTime today = DateTime.Today; 
// get the last birthday 
int years = today.Year - birthDate.Year; 
DateTime last = birthDate.AddYears(years); 
if (last > today) { 
    last = last.AddYears(-1); 
    years--; 
} 
// get the next birthday 
DateTime next = last.AddYears(1); 
// calculate the number of days between them 
double yearDays = (next - last).Days; 
// calcluate the number of days since last birthday 
double days = (today - last).Days; 
// calculate exaxt age 
double exactAge = (double)years + (days/yearDays); 
+1

Auf der nächsten Geburtstag Zeile, AddYears nicht richtig Schaltjahre in Bezug auf Alter. Sagen Sie, Ihr Geburtstag ist der 29. Februar 2008. Wenn Sie 1 Jahr hinzufügen, erhalten Sie 2008-02-28 statt 2008-03-01. –

+0

hätte sein sollen: Wenn Sie 1 Jahr hinzufügen, gibt es Ihnen 2009-02-28 statt 2009-03-01. –

+1

Nun, warum wäre 2009-03-01 korrekter als 2009-02-28? – Guffa

5

Dies ist eine approximative Berechnung wäre:

TimeSpan span = DateTime.Today.Subtract(birthDate); 
Console.WriteLine("Age: " + (span.TotalDays/365.25).toString()); 

BTW: auch diese Frage auf Stack-Überlauf: How do I calculate someone’s age in C#?

+0

Die .25 ist für die Schaltjahre. – DevinB

+0

Entschuldigung "/" ist richtig. Ich habe meine Antwort bearbeitet. – splattne

+0

Sie könnten "span.TotalDays" verwenden, um noch besser zu approximieren – MartinStettner

1

Ein approximite wäre:

 DateTime bd = new DateTime(1999, 1, 2); 

     TimeSpan age = DateTime.Now.Subtract(bd); 
     Console.WriteLine(age.TotalDays/365.25); 
0

Sie könnten dies tun:

Console.WriteLine(DateTime.Now.Date.Subtract(new DateTime(1980, 8, 1)).TotalDays/365.25); 
0

Wie viel Fehler ist im Bruchteil Teil zulässig? ein genaues Alter wäre

31 Jahre, 10 Tage, 3 Stunden, etc. je nach der gewünschten Präzision.

1

Der 40-jährige Teil ist einfach genug. Aber um einen wirklich genauen Dezimalpunkt zu erhalten, bin ich nicht sicher, wie Sie den Rest des Alters in eine Dezimalzahl übersetzen. Sie sehen, dass das Alter in Jahren, Monaten, Tagen, Stunden, Sekunden ausgedrückt wird. Und die Berechnung ist nicht so einfach. Du musst mit Jubiläumsterminen fertig werden. Wie wenn jemand am 31. Januar geboren wurde, wann sind sie 1 Monat alt? Die Antwort ist der 1. März. Aber in einigen Jahren ist das 28 Tage später und einige Jahre 29 Tage später. Here ist eine Javascript-Implementierung, die ich versuchte, damit umzugehen.

Aber ich nehme an, die Dezimalstelle könnte die Anzahl der Tage seit dem letzten Geburtstag Jahrestag geteilt durch die Anzahl der Tage bis zum nächsten Geburtstag Jubiläum ausdrücken. Und wenn Sie präziser werden wollten, konnten Sie dies in Sekunden nach dem gleichen Prinzip tun.

Aber ich denke, es ist eine schlechte Darstellung eines Zeitalters. Wir repräsentieren normalerweise kein Alter wie dieses.

Und stellen Sie sicher, dass Ihre Termine in der gleichen Zeitzone für Ihre Vergleiche sind.

Verwandte Themen