给定代表某人生日的DateTime,我如何计算他们的年龄(以年为单位)?
当前回答
无分支解决方案:
public int GetAge(DateOnly birthDate, DateOnly today)
{
return today.Year - birthDate.Year + (((today.Month << 5) + today.Day - ((birthDate.Month << 5) + birthDate.Day)) >> 31);
}
其他回答
我对DateTime一无所知,但我能做的就是:
using System;
public class Program
{
public static int getAge(int month, int day, int year) {
DateTime today = DateTime.Today;
int currentDay = today.Day;
int currentYear = today.Year;
int currentMonth = today.Month;
int age = 0;
if (currentMonth < month) {
age -= 1;
} else if (currentMonth == month) {
if (currentDay < day) {
age -= 1;
}
}
currentYear -= year;
age += currentYear;
return age;
}
public static void Main()
{
int ageInYears = getAge(8, 10, 2007);
Console.WriteLine(ageInYears);
}
}
有点困惑,但仔细看代码,这一切都是有意义的。
保持简单(可能是愚蠢的:)。
DateTime birth = new DateTime(1975, 09, 27, 01, 00, 00, 00);
TimeSpan ts = DateTime.Now - birth;
Console.WriteLine("You are approximately " + ts.TotalSeconds.ToString() + " seconds old.");
只是因为我认为最重要的答案不是那么明确:
public static int GetAgeByLoop(DateTime birthday)
{
var age = -1;
for (var date = birthday; date < DateTime.Today; date = date.AddYears(1))
{
age++;
}
return age;
}
var EndDate = new DateTime(2022, 4, 21);
var StartDate = new DateTime(1986, 4, 25);
Int32 Months = EndDate.Month - StartDate.Month;
Int32 Years = EndDate.Year - StartDate.Year;
Int32 Days = EndDate.Day - StartDate.Day;
if (Days < 0)
{
Months = Months - 1;
}
if (Months < 0)
{
Years = Years - 1;
Months = Months + 12;
}
string Ages = Years.ToString() + " Year(s) " + Months.ToString() + " Month(s) ";
简单易读,方法互补
public static int getAge(DateTime birthDate)
{
var today = DateTime.Today;
var age = today.Year - birthDate.Year;
var monthDiff = today.Month - birthDate.Month;
var dayDiff = today.Day - birthDate.Day;
if (dayDiff < 0)
{
monthDiff--;
}
if (monthDiff < 0)
{
age--;
}
return age;
}
推荐文章
- c#线程安全快速(est)计数器
- 如何将此foreach代码转换为Parallel.ForEach?
- 如何在iis7应用程序池中设置。net Framework 4.5版本
- 如何分裂()一个分隔字符串到一个列表<字符串>
- 如何转换列表<字符串>列表<int>?
- 在Java中转换字符串到日历对象
- c#对象列表,我如何得到一个属性的和
- 我如何使用IValidatableObject?
- 如何指定最小值,但没有使用范围数据注释属性的最大小数?
- 如何在PowerShell中获得本地主机名?
- c# vs Java Enum(适合c#新手)
- c#消毒文件名
- 为什么在Java和。net中不能修改字符串?
- ZoneOffset之间的区别是什么。UTC和ZoneId.of(“UTC”)?
- 在EF中更新父实体时如何添加/更新子实体