两个日期之间的差异,如果这个人年满18岁或者不到18岁就可以计算出来#

时间:2018-01-29 11:11:20

标签: c# .net

我将有两个约会。 出生日期 和事件日期

我想计算出生日期和活动日期之间的时间是否小于或大于18年。活动日期将始终大于出生日期。

如果未满18岁则为真,否则为假。

EG:DOB 29/02/1976。 活动日期29/12/2017

这里的人超过18岁!​​

我不确定使用DateAdd或DateDiff是最好的方法 - 或者即使使用DateTime.Days&& DateTime.Months等

2 个答案:

答案 0 :(得分:6)

你给出的例子是一个相当容易的例子 - 但是有更难的例子。考虑一下:

  • 出生日期:1976年2月29日
  • 活动日期:1994年2月28日

如果您在出生日期增加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天1​​8+否则未成年;)