The tricky bit is getting the ordinal for the day (5th, 21st, etc) as there is no support for this in the framework (that I can find). static string[] DayOrdinals = new string[]{ "", "1st","2nd","3rd", "4th", "5th", "6th", "7th", "8th", "9th", "10th", "11th", "12th", "13th", "14th", "15th", "16th", "17th", "18th"