Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calculating past datetime in C#

I am working on an algorithm in C# to calculate a past DateTime based on an input string with the following characteristics:

The string contains an integer followed by either 'D', 'M' or 'Y', such as "1D" or "90M".

The output will be DateTime.Now minus the corresponding number of days, months or years.

The issue I am having is that if, for instance, I switch the input string on a Regex (D, M or Y) and subtract the corresponding TimeSpan from DateTime.Now, the new TimeSpan() constructor does not accept months or years, only days.

if (new Regex(@"[0-9]+D").IsMatch(value))
{
    newDate = DateTime.Now - TimeSpan(Int32.Parse(value.Replace("D", "")), 0, 0);
}

This logic is fine if the input string is in days, but the constructor for TimeSpan does not accept months or years, and it would be incredibly inaccurate if I assumed each month had 30 days, or each year had 365 days.

Does anyone have thoughts on how to implement this algorithm?

Thanks!

like image 417
Nick Vaccaro Avatar asked Mar 01 '10 20:03

Nick Vaccaro


2 Answers

DateTime has AddMonths, AddDays and AddYears methods. Use them with minus to substract

like image 186
Svetlozar Angelov Avatar answered Nov 15 '22 05:11

Svetlozar Angelov


Could you not rather try using the AddDays/AddMonths/AddYears but with negative numbers?

From DateTime.AddDays Method

The value parameter can be negative or positive.

And then maybe just implement a switch stament to apply the appropriate Add method.

like image 3
Adriaan Stander Avatar answered Nov 15 '22 06:11

Adriaan Stander