【发布时间】:2011-03-10 08:09:51
【问题描述】:
我想基本上计算员工的年龄 - 所以我们有每个员工的 DOB,等等 C# 方面我想做这样的事情 -
int age=Convert.Int32(DateTime.Now-DOB);
我可以使用天数并进行操作,然后得到年龄......但我想知道是否有什么东西可以直接用来得到年数。
【问题讨论】:
我想基本上计算员工的年龄 - 所以我们有每个员工的 DOB,等等 C# 方面我想做这样的事情 -
int age=Convert.Int32(DateTime.Now-DOB);
我可以使用天数并进行操作,然后得到年龄......但我想知道是否有什么东西可以直接用来得到年数。
【问题讨论】:
您要计算员工的年龄吗?然后就可以使用这个sn-p(来自Calculate age in C#):
DateTime now = DateTime.Today;
int age = now.Year - bday.Year;
if (bday > now.AddYears(-age)) age--;
如果不是,请说明。我很难理解你想要什么。
【讨论】:
AddYears() 为任何非闰年返回 2 月 28 日(如果输入的出生日期是有效的 2 月 29 日)。一个理想的解决方案是将国家作为参数:)
减去两个DateTime 得到一个TimeSpan。不幸的是,它返回的最大单位是天。
虽然不准确,但您可以估计它,如下所示:
int days = (DateTime.Today - DOB).Days;
//assume 365.25 days per year
decimal years = days / 365.25m;
编辑:哎呀,TotalDays 是双精度数,Days 是整数。
【讨论】:
在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;
}
【讨论】:
private static Int32 CalculateAge(DateTime DOB)
{
DateTime temp = DOB;
Int32 age = 0;
while ((temp = temp.AddYears(1)) < DateTime.Now)
age++;
return age;
}
【讨论】:
<= DateTime.Now。在您的示例中出生于 28/1/1980 -> 28/1/1981 = 0
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)
天啊,这些天我的基础数学很烂……
【讨论】:
(DateTime.Now - DOB).TotalDays/365
从另一个 DateTime 结构中减去一个 DateTime 结构会得到一个 TimeSpan 结构,它具有 TotalDays... 属性,然后除以 365
【讨论】: