lucisferre

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult. —Sir Charles Antony Richard Hoare”

Can DateTime Spare a Quarter?

Ok so this isn’t really very impressive for a blog post, but I am curious if anyone has a more sensible way to do this.

The DateTime struct understands, seconds, minutes, hours, days, months, years, etc. However, I find it kind of odd that the DateTime struct doesn’t understand “quarters”. Quarters of a year are a common concept in any finance application and unlike weeks they are not all the same length.

What I need to determine is the start and end dates of the quarter for the current date minus one month. There are a million ways I could do this:

  1. I could just have a helper class with the 4 start date of the quarter and have it do comparisons. Seems a bit overkill to have a class.
  2. I could just compare the DateTime.Month value to values 1, 4, 7, 10 to figure out which quarter I am in and then set the start and end dates. This is nice and simple.
  3. Instead I did this:
1
2
3
4
5
6
7
8
//Get the previous month mod(3) (0,1,2) 
var monthInQuarter = (DateTime.Today.Month + 1) % 3;

//Set start and end dates
EndDate = DateTime.Today.AddDays(-(DateTime.Today.Day));

//Start date is the first day of the beginning of the quarter
StartDate = EndDate.AddMonths(-1*monthInQuarter).AddDays(-(EndDate.Day-1));

mmmmm… mod math ;-). Ok so it isn’t that cool, but I’m sure I’m going to need to use this again.

Chris

Edit: Fixed my total failure with brackets.

Comments