Pchp.Library.DateTimeFunctions.MakeDateTime C# (CSharp) Method

MakeDateTime() static private method

static private MakeDateTime ( int hour, int minute, int second, int month, int day, int year ) : System.DateTime
hour int
minute int
second int
month int
day int
year int
return System.DateTime
        internal static System_DateTime MakeDateTime(int hour, int minute, int second, int month, int day, int year)
        {
            if (year >= 0 && year < 70) year += 2000;
            else if (year >= 70 && year <= 110) year += 1900;

            // TODO (better)

            var dt = new System_DateTime(0);
            int i = 0;

            try
            {
                // first add positive values, than negative to not throw exception
                // if there will be negative values first.
                // This works bad for upper limit, if there are big positive values that
                // exceeds DateTime.MaxValue and big negative that will substract it to
                // less value, this returns simply MaxValue - it is big enough, so it
                // should not occur in real life. Algorithm handling this correctly will
                // be much more complicated.
                for (i = 1; i <= 2; i++)
                {
                    if (i == 1 && year >= 0)
                        dt = dt.AddYears(year - 1);
                    else if (i == 2 && year < 0)
                        dt = dt.AddYears(year - 1);

                    if (i == 1 && month >= 0)
                        dt = dt.AddMonths(month - 1);
                    else if (i == 2 && month < 0)
                        dt = dt.AddMonths(month - 1);

                    if (i == 1 && day >= 0)
                        dt = dt.AddDays(day - 1);
                    else if (i == 2 && day < 0)
                        dt = dt.AddDays(day - 1);

                    if (i == 1 && hour >= 0)
                        dt = dt.AddHours(hour);
                    else if (i == 2 && hour < 0)
                        dt = dt.AddHours(hour);

                    if (i == 1 && minute >= 0)
                        dt = dt.AddMinutes(minute);
                    else if (i == 2 && minute < 0)
                        dt = dt.AddMinutes(minute);

                    if (i == 1 && second >= 0)
                        dt = dt.AddSeconds(second);
                    else if (i == 2 && second < 0)
                        dt = dt.AddSeconds(second);
                }
            }
            catch (ArgumentOutOfRangeException)
            {
                if (i == 1) // exception while adding positive values
                    dt = System_DateTime.MaxValue;
                else // exception while substracting
                    dt = System_DateTime.MinValue;
            }

            return dt;
        }