This is in response to Kirk Woll's answer. I don't have enough reputation points to reply to a comment yet...
I liked Kirk's solution and was going to shamelessly rip it off and use it in my code, but when I looked through it I realized it's way too complicated. Unnecessary switching and looping, and a public constructor that is pointless to use.
Here's my rewrite:
public class DateTimeSpan { private DateTime _date1; private DateTime _date2; private int _years; private int _months; private int _days; private int _hours; private int _minutes; private int _seconds; private int _milliseconds; public int Years { get { return _years; } } public int Months { get { return _months; } } public int Days { get { return _days; } } public int Hours { get { return _hours; } } public int Minutes { get { return _minutes; } } public int Seconds { get { return _seconds; } } public int Milliseconds { get { return _milliseconds; } } public DateTimeSpan(DateTime date1, DateTime date2) { _date1 = (date1 > date2) ? date1 : date2; _date2 = (date2 < date1) ? date2 : date1; _years = _date1.Year - _date2.Year; _months = (_years * 12) + _date1.Month - _date2.Month; TimeSpan t = (_date2 - _date1); _days = t.Days; _hours = t.Hours; _minutes = t.Minutes; _seconds = t.Seconds; _milliseconds = t.Milliseconds; } public static DateTimeSpan CompareDates(DateTime date1, DateTime date2) { return new DateTimeSpan(date1, date2); }}
Usage1, pretty much the same:
void Main(){ DateTime compareTo = DateTime.Parse("8/13/2010 8:33:21 AM"); DateTime now = DateTime.Parse("2/9/2012 10:10:11 AM"); var dateSpan = new DateTimeSpan(compareTo, now); Console.WriteLine("Years: "+ dateSpan.Years); Console.WriteLine("Months: "+ dateSpan.Months); Console.WriteLine("Days: "+ dateSpan.Days); Console.WriteLine("Hours: "+ dateSpan.Hours); Console.WriteLine("Minutes: "+ dateSpan.Minutes); Console.WriteLine("Seconds: "+ dateSpan.Seconds); Console.WriteLine("Milliseconds: "+ dateSpan.Milliseconds);}
Usage2, similar:
void Main(){ DateTime compareTo = DateTime.Parse("8/13/2010 8:33:21 AM"); DateTime now = DateTime.Parse("2/9/2012 10:10:11 AM"); Console.WriteLine("Years: "+ DateTimeSpan.CompareDates(compareTo, now).Years); Console.WriteLine("Months: "+ DateTimeSpan.CompareDates(compareTo, now).Months); Console.WriteLine("Days: "+ DateTimeSpan.CompareDates(compareTo, now).Days); Console.WriteLine("Hours: "+ DateTimeSpan.CompareDates(compareTo, now).Hours); Console.WriteLine("Minutes: "+ DateTimeSpan.CompareDates(compareTo, now).Minutes); Console.WriteLine("Seconds: "+ DateTimeSpan.CompareDates(compareTo, now).Seconds); Console.WriteLine("Milliseconds: "+ DateTimeSpan.CompareDates(compareTo, now).Milliseconds);}