1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| struct DateSpan
{
private readonly int _years;
private readonly int _months;
private readonly int _days;
public DateSpan(int years, int months, int days)
{
_years = years;
_months = months;
_days = days;
}
public int Years
{
get { return _years; }
}
public int Months
{
get { return _months; }
}
public int Days
{
get { return _days; }
}
public static DateSpan Subtract(DateTime x, DateTime y)
{
int ix = int.Parse(x.ToString("yyyyMMdd"));
int iy = int.Parse(y.ToString("yyyyMMdd"));
int diff = ix - iy;
int sign = Math.Sign(diff);
string s = Math.Abs(diff).ToString("D8");
int years = int.Parse(s.Substring(0, 4));
int months = int.Parse(s.Substring(4, 2));
if (months >= 12)
months = 12 - 100 + months;
int days = int.Parse(s.Substring(6, 2));
int daysInMonth = DateTime.DaysInMonth(x.Year, x.Month);
if (days >= daysInMonth)
days = daysInMonth - 100 + days;
return new DateSpan(sign*years, sign*months, sign*days);
}
public override string ToString()
{
return string.Format("{0} year(s), {1} month(s) and {2} day(s)", _years, _months, _days);
}
} |
Partager