我将有两个约会。 出生日期 和事件日期
我想计算出生日期和活动日期之间的时间是否小于或大于18年。活动日期将始终大于出生日期。
如果未满18岁则为真,否则为假。
EG:DOB 29/02/1976。 活动日期29/12/2017
这里的人超过18岁!
我不确定使用DateAdd或DateDiff是最好的方法 - 或者即使使用DateTime.Days&& DateTime.Months等
答案 0 :(得分:6)
你给出的例子是一个相当容易的例子 - 但是有更难的例子。考虑一下:
如果您在出生日期增加18年,您将获得1994年2月28日 - 活动日期。这表明该人 18岁。
如果你从活动日期减去18年,你将获得1976年2月28日(在此人生日之前)。这表明该人不是 18岁。
我怀疑在几乎所有情况下,你都会认为这个人在2月28日的非闰年庆祝他们的生日。所以代码是:
var adult = birthDate.AddYears(18) <= eventDate;
确保这两个值都只是没有任何时间的日期。
核心.NET库不提供任何方法来查找两个DateTime
值之间的期间。您可以找到TimeSpan
,但这不是一回事,对日历计算没有用。 (例如,您无法确定30天的TimeSpan
是否整整一个月,因为它取决于具体情况。)
我的Noda Time库 提供此功能:
var birthDate = new LocalDate(1976, 2, 29);
var eventDate = new LocalDate(1994, 2, 28);
var period = Period.Between(birthDate, eventDate);
var adult = period.Years >= 18;
Console.WriteLine(period); // P18Y
...但在这种情况下,您可以轻松地在DateTime
中完成所需的操作。 (如果您有其他日期/时间方案,我建议使用Noda Time,只是基于它旨在使日期/时间工作更容易正确的原则。)
答案 1 :(得分:0)
( (EndDate - StartDate).TotalDays / (DOB - TODAY).TotalDays)
然后检查结果是否超过1天18+否则未成年;)