簡體   English   中英

在給定日期時間的情況下,以小數為單位的年齡

[英]Age in years with decimal precision given a datetime

如何在 C# 日期時間中獲取某人的年齡。

我想要一個准確的年齡,比如 40.69 歲

這將計算確切的年齡。 年齡的小數部分是相對於上一個生日和下一個生日之間的天數計算的,因此它將正確處理閏年。

小數部分在一年中是線性的(並且不考慮月份的不同長度),如果您想表達小數年齡,這似乎最有意義。

// 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);

這將是一個近似計算:

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

順便說一句:另請參閱 Stack Overflow 上的這個問題:如何在 C# 中計算某人的年齡?

一個近似值是:

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

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

40年的部分很容易。 但是要得到一個真正准確的小數點,我不知道你是如何將時代的 rest 翻譯成十進制數的。 您會看到年齡以年、月、日、小時、秒表示。 而且計算不是那么容易。 你必須處理周年紀念日。 就像某人在 1 月 31 日出生,他們是 1 個月大嗎? 答案是 3 月 1 日。 但有些年份是 28 天后,有些年份是 29 天后。 是我嘗試處理的 javascript 實現。

但我想小數可以表示自最近的生日周年紀念日以來的天數除以下一個生日周年紀念日的天數。 如果您想獲得更精確的信息,您可以使用相同的原理在幾秒鍾內完成。

但我認為這是一個時代的不良代表。 我們只是通常不代表這樣的年齡。

並確保您的日期時間在同一時區進行比較。

你可以這樣做:

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

小數部分允許有多少錯誤? 准確的年齡是

31 年、10 天、3 小時等,取決於所需的精度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM