2012-11-13 131 views
0

我如何計算一個人的年齡(月/年),以便任何兩歲以下的人在幾個月內報告,而在兩年內只報告一個年份?如何以月/年計算一個人的年齡?

+0

是的,我認爲這看起來微不足道,但它是令人驚訝的不是直線前進,你會期待。 – Brad

+0

@JohanLarsson,沒有回答幾個月的問題。如果你閱讀了評論,你會發現#1的答案在短短几年內就不合適。 –

回答

3

我會用NodaTime這個有用:

var d1 = new NodaTime.LocalDate(1997, 12, 10); 
var d2 = new NodaTime.LocalDate(2012, 11, 13); 

var period = NodaTime.Period.Between(d1, d2); 
var m = period.Months; 
var y = period.Years; 
0
var now = DateTime.Today; 

int months = 0; 
while (true) 
{ 
    var temp = dob.AddMonths((int)months); 
    if (now < temp) 
    { 
     if (now.Day < temp.Day) 
      months--; //accounts for short months 
     break; 
    } 
    months++; 
} 

if (months < 24) 
    return (months + " months"); 
else 
    return (Math.Floor((decimal)months/12.0M) + " years"); 
+0

這是否意味着你已經試過的代碼?如果是這樣,你應該把它包括在你的問題中。 – jrajav

+1

@Kiyura:真的嗎?建議你閱讀以下文章:http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ – spender

+0

@spender,我很清楚,我只是想要確定他沒有犯錯。我可能本應該先在他的代表身上做出一個雄壯的。 :) – jrajav

-1
private string Birthdate(DateTime birthday) 
{ 
    var birthdayTicks = birthday.Ticks; 
    var twoYearsTicks = birthday.AddYears(2).Ticks; 
    var NowTicks = DateTime.Now.Ticks; 

    var moreThanTwoYearsOld = twoYearsTicks < NowTicks; 

    var age = new DateTime(DateTime.Now.Subtract(birthday).Ticks); 

    return moreThanTwoYearsOld ? (age.Year-1).ToString() + " years" : (age.Year-1 >= 1 ? age.Month + 12 : age.Month).ToString() + " months"; 
} 
+0

這幾乎從不給出正確的答案。那麼一年的長度不是365.25,也不是一年中的一個月的十二分之一。 –

+0

爲什麼一年的長度*不是* 365.25? – Brad

+0

@JonathanAllen phew!那個怎麼樣? – Brad

0

我從字面上失去了一個小時+這一挑戰,我認爲這將是簡單的。發現另一個SO問題,這個答案可能是

C# Formatting Age - Regarding Days, Weeks , Months - Years

+0

這適用於美國,但不適用於其他國家。 「在俄羅斯(1918年),希臘(1924年)和土耳其(1926年)等當前活生人的誕生後,有幾個國家的日期略有不同。」 - Lars D 09年11月9日 –

+0

是的這是一個複雜的問題,如果有準確的數字非常重要,你可能希望找一個圖書館來爲你做。 – NoPyGod