Le meilleur moyen que je connaisse à cause des années bissextiles et tout est :
DateTime birthDate = new DateTime(2000,3,1);
int age = (int)Math.Floor((DateTime.Now - birthDate).TotalDays / 365.25D);
J'espère que cela vous aidera.
Étant donné un DateTime
représentant l'anniversaire d'une personne, comment puis-je calculer son âge en années ?
Le meilleur moyen que je connaisse à cause des années bissextiles et tout est :
DateTime birthDate = new DateTime(2000,3,1);
int age = (int)Math.Floor((DateTime.Now - birthDate).TotalDays / 365.25D);
J'espère que cela vous aidera.
Une autre fonction, pas de moi mais trouvée sur le web et un peu affinée :
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;
}
Juste deux choses qui me viennent à l'esprit : qu'en est-il des personnes originaires de pays qui n'utilisent pas le calendrier grégorien ? DateTime.Now est dans la culture spécifique au serveur, je pense. J'ai absolument 0 connaissances sur le travail avec les calendriers asiatiques et je ne sais pas s'il existe un moyen simple de convertir des dates entre les calendriers, mais juste au cas où vous vous poseriez des questions sur ces chinois de l'année 4660 :-)
C'est la version que nous utilisons ici. Ça marche, et c'est assez simple. C'est la même idée que celle de Jeff mais je pense que c'est un peu plus clair parce que ça sépare la logique pour soustraire un, donc c'est un peu plus facile à comprendre.
public static int GetAge(this DateTime dateOfBirth, DateTime dateAsAt)
{
return dateAsAt.Year - dateOfBirth.Year - (dateOfBirth.DayOfYear < dateAsAt.DayOfYear ? 0 : 1);
}
Vous pouvez développer l'opérateur ternaire pour le rendre encore plus clair, si vous pensez que ce genre de chose n'est pas clair.
Évidemment, cela se fait comme une méthode d'extension sur DateTime
, mais il est clair que vous pouvez saisir cette ligne de code qui fait le travail et la mettre n'importe où. Ici, nous avons une autre surcharge de la méthode Extension qui passe en DateTime.Now
, juste pour être complet.
C'est une façon étrange de le faire, mais si vous formatez la date en yyyymmdd
et soustrayez la date de naissance de la date actuelle, puis supprimez les 4 derniers chiffres, vous avez l'âge : )
Je ne sais pas C
J'ai créé une fonction définie par l'utilisateur SQL Server pour calculer l'âge d'une personne, compte tenu de sa date de naissance. Ceci est utile lorsque vous en avez besoin dans le cadre d'une requête :
using System;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
public partial class UserDefinedFunctions
{
[SqlFunction(DataAccess = DataAccessKind.Read)]
public static SqlInt32 CalculateAge(string strBirthDate)
{
DateTime dtBirthDate = new DateTime();
dtBirthDate = Convert.ToDateTime(strBirthDate);
DateTime dtToday = DateTime.Now;
// get the difference in years
int years = dtToday.Year - dtBirthDate.Year;
// subtract another year if we're before the
// birth day in the current year
if (dtToday.Month < dtBirthDate.Month || (dtToday.Month == dtBirthDate.Month && dtToday.Day < dtBirthDate.Day))
years=years-1;
int intCustomerAge = years;
return intCustomerAge;
}
};
Ma suggestion
int age = (int) ((DateTime.Now - bday).TotalDays/365.242199);
Il semble que l'année change à la bonne date. (J'ai fait un test ponctuel jusqu'à 107 ans)