给定代表某人生日的DateTime,我如何计算他们的年龄(以年为单位)?
当前回答
为什么不能简化为检查出生日期?
第一行(var year=end.year-start.year-1;):假设出生日期尚未发生在结束年份。然后检查月份和日期,看看是否发生了;再增加一年。
对闰年情景没有特殊处理。如果不是闰年,你不能创建一个日期(2月29日)作为结束日期,所以如果结束日期是3月1日,而不是28日,生日庆祝活动将被计算在内。下面的函数将将此场景作为普通日期进行描述。
static int Get_Age(DateTime start, DateTime end)
{
var year = end.Year - start.Year - 1;
if (end.Month < start.Month)
return year;
else if (end.Month == start.Month)
{
if (end.Day >= start.Day)
return ++year;
return year;
}
else
return ++year;
}
static void Test_Get_Age()
{
var start = new DateTime(2008, 4, 10); // b-date, leap year BTY
var end = new DateTime(2023, 2, 1); // end date is before the b-date
var result1 = Get_Age(start, end);
var success1 = result1 == 14; // true
end = new DateTime(2023, 4, 10); // end date is on the b-date
var result2 = Get_Age(start, end);
var success2 = result2 == 15; // true
end = new DateTime(2023, 6, 22); // end date is after the b-date
var result3 = Get_Age(start, end);
var success3 = result3 == 15; // true
start = new DateTime(2008, 2, 29); // b-date is on feb 29
end = new DateTime(2023, 2, 28); // end date is before the b-date
var result4 = Get_Age(start, end);
var success4 = result4 == 14; // true
end = new DateTime(2020, 2, 29); // end date is on the b-date, on another leap year
var result5 = Get_Age(start, end);
var success5 = result5 == 12; // true
}
其他回答
我使用这个:
public static class DateTimeExtensions
{
public static int Age(this DateTime birthDate)
{
return Age(birthDate, DateTime.Now);
}
public static int Age(this DateTime birthDate, DateTime offsetDate)
{
int result=0;
result = offsetDate.Year - birthDate.Year;
if (offsetDate.DayOfYear < birthDate.DayOfYear)
{
result--;
}
return result;
}
}
只需使用:
(DateTime.Now - myDate).TotalHours / 8766.0
当前日期-myDate=TimeSpan,获取总小时数并除以每年的总小时数,得到确切的年龄/月/日。。。
这是一个非常简单的方法:
int Age = DateTime.Today.Year - new DateTime(2000, 1, 1).Year;
要使用最近的年龄计算年龄:
var ts = DateTime.Now - new DateTime(1988, 3, 19);
var age = Math.Round(ts.Days / 365.0);
为了计算一个人的年龄,
DateTime dateOfBirth;
int ageInYears = DateTime.Now.Year - dateOfBirth.Year;
if (dateOfBirth > today.AddYears(-ageInYears )) ageInYears --;
推荐文章
- 如何从枚举中选择一个随机值?
- 驻留在App_Code中的类不可访问
- 在链式LINQ扩展方法调用中等价于'let'关键字的代码
- dynamic (c# 4)和var之间的区别是什么?
- Visual Studio: ContextSwitchDeadlock
- Sql Server字符串到日期的转换
- 返回文件在ASP。Net Core Web API
- 自定义HttpClient请求头
- 如果我使用OWIN Startup.cs类并将所有配置移动到那里,我是否需要一个Global.asax.cs文件?
- VS2013外部构建错误"error MSB4019: The imported project <path> was not found"
- 从另一个列表id中排序一个列表
- 等待一个无效的异步方法
- 无法加载文件或程序集…参数不正确
- c#中枚举中的方法
- 如何从字符串中删除新的行字符?