Hi,

I'm trying to piece together a simple calendar in C#. It is not a winform app, but a console application (so I can't just use the winform DatePicker).

I've come across a couple of C examples, with http://www.codingunit.com/how-to-make-a-calendar-in-c being the simplest to port over. Problem is that Feb started on a Wednesday and this comes up with a Monday for some odd reason.

Does anyone know a quick and simple way to do this in C#?

My code currently looks like this

    public class calendar
    {
        private List<int> daysInMonth;

        public calendar()
        {
            daysInMonth = new List<int>();
daysInMonth.AddRange(new int[] { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 });
        }

        private int determineDayCode(int year)
        {
            Console.WriteLine("year = {0}", year);
            int d1 = (year - 1)/ 4;
            int d2 = (year - 1)/ 100;
            int d3 = (year - 1)/ 400;
            return Convert.ToInt32((year + d1 - d2 + d3) % 7);
        }

        private void checkForLeapYear(int year)
        {
            if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
                daysInMonth[2] = 29;
            else
                daysInMonth[2] = 28;
        }

        private List<int> createCal(int ddc, int month, int year)
        {
            int day;
            List<int> cal = new List<int>();
            Console.WriteLine("1 + ddc * 5 = {0}", 1 + ddc * 5);
            for (day = 1; day <= 1 + ddc * 5; ++day)
                cal.Add(0);
            for (day = 1; day <= daysInMonth[month]; ++day)
                cal.Add(day);
            return cal;
        }

        public List<int> generateCalendar(int month, int year)
        {
            List<int> cal = new List<int>();
            int ddc = determineDayCode(year);
            checkForLeapYear(year);
            cal = createCal(ddc, month, year);
            return cal;
        }
    }

The calling methods passes in month and year and expects back a list. The idea is that it will put a 0 if the start of the week is not on that day (so for Feb, it should read 0,0,0,1 but it's coming out 0,1)

Thanks

Paul
_______________________________________________
Mono-list maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-list

Reply via email to