web-dev-qa-db-ja.com

2つの日付の差を計算し、年単位の値を取得しますか?

可能性のある複製:
C#で誰かの年齢を計算する方法は?

基本的に従業員の年齢を計算したい-だから各従業員にDOBがあるので、C#側ではこのようなことをしたい-

int age=Convert.Int32(DateTime.Now-DOB);

私は日を使用して操作し、年齢を取得することができます...しかし、年数を取得するために直接使用できるものがあるかどうかを知りたいと思いました。

44
Vishal

従業員の年齢を年単位で計算しますか?次に、このスニペットを使用できます( C#で年齢を計算 ):

DateTime now = DateTime.Today;
int age = now.Year - bday.Year;
if (bday > now.AddYears(-age)) age--;

そうでない場合は、指定してください。あなたが望むものを理解するのに苦労しています。

79
alexn

2つのDateTimeを引くと、 TimeSpan に戻ります。残念ながら、それがあなたに返す最大の単位はデイズです。

正確ではありませんが、次のように推定できますcan

int days = (DateTime.Today - DOB).Days;

//assume 365.25 days per year
decimal years = days / 365.25m;

編集:おっと、TotalDaysはdouble、Daysはintです。

16
Powerlord

this にあるサイト:

   public static int CalculateAge(DateTime BirthDate)
   {
        int YearsPassed = DateTime.Now.Year - BirthDate.Year;
        // Are we before the birth date this year? If so subtract one year from the mix
        if (DateTime.Now.Month < BirthDate.Month || (DateTime.Now.Month == BirthDate.Month && DateTime.Now.Day < BirthDate.Day))
        {
            YearsPassed--;
        }
        return YearsPassed;
  }
7
Kyra
    private static Int32 CalculateAge(DateTime DOB)
    {
        DateTime temp = DOB;
        Int32 age = 0;
        while ((temp = temp.AddYears(1)) < DateTime.Now)
            age++;
        return age;
    }
4
matt-dot-net

Math.Round(DateTime.Now.Subtract(DOB).TotalDays/365.0)

指摘したように、これは機能しません。あなたはこれをしなければなりません:

(Int32)Math.Round((span.TotalDays - (span.TotalDays % 365.0)) / 365.0);

その時点で、他のソリューションはそれほど複雑ではなく、より長いスパンにわたって正確であり続けます。

編集2、方法:

Math.Floor(DateTime.Now.Subtract(DOB).TotalDays/365.0)

キリスト、私は最近、基本的な数学を吸います...

0
Kendrick