Пример #1
0
 public DateSystem(int hour, int day, DateMonthName month, int year)
 {
     dateHour    = hour;
     dateDay     = day;
     dateMonth   = month;
     dateYear    = year;
     dateWeekDay = GetWeakDay(day, month, year);
 }
Пример #2
0
    public DateWeekDayName GetWeakDay(int day, DateMonthName month, int year)
    {
        //get previous month days and add it
        int previousMonthDays = 0;

        switch (month)
        {
        case DateMonthName.February:
            previousMonthDays = 31;
            break;

        case DateMonthName.March:
            previousMonthDays = 59;
            break;

        case DateMonthName.April:
            previousMonthDays = 90;
            break;

        case DateMonthName.May:
            previousMonthDays = 120;
            break;

        case DateMonthName.June:
            previousMonthDays = 151;
            break;

        case DateMonthName.July:
            previousMonthDays = 181;
            break;

        case DateMonthName.August:
            previousMonthDays = 212;
            break;

        case DateMonthName.September:
            previousMonthDays = 243;
            break;

        case DateMonthName.October:
            previousMonthDays = 273;
            break;

        case DateMonthName.November:
            previousMonthDays = 304;
            break;

        case DateMonthName.December:
            previousMonthDays = 334;
            break;
        }
        //get get if current year is a leap year
        int leapYearOffset = year % 4;

        if (leapYearOffset == 0 && (int)month > 1)
        {
            previousMonthDays += 1;
        }
        //we dont count the current year for our days count, since it did not end yet and it is calculated above
        year          -= 1;
        leapYearOffset = year % 4;
        //get leap years days offset and add it
        int leapYearDays = (year - leapYearOffset) / 4;
        int totalDays    = day + ((year) * 365) + leapYearDays + previousMonthDays;

        totalDays %= 7;
        DateWeekDayName weekDay = (DateWeekDayName)totalDays;

        return(weekDay);
    }
Пример #3
0
    public void ChangeDay(int days)
    {
        dateDay += days;

        //changeDayOfWeek
        int currentDayOfWeek = (int)dateWeekDay;
        int dayWeek          = (days % 7) + currentDayOfWeek;

        if (dayWeek > 6)
        {
            dayWeek -= 7;
        }
        dateWeekDay = (DateWeekDayName)dayWeek;

        // if days more than 365 and year is not leap jump a whole year else if leap and more than 366 days jump a whole year And substract year amount to days saves a lot of iterations
        // if more than 365, years = days - (dyas %365) / 365, amountofleapyears = ((year%4) + years) - ((year%4) + years)%4)) / 4, dateday = dateday - ((365 * years) + amountofleapyears)
        if (dateDay > 365)
        {
            //first get 4 year loop
            int fourYearDays    = (365 * 4) + 1;
            int fourYearsRest   = dateDay % fourYearDays;
            int fourYearsAmount = (dateDay - (fourYearsRest)) / fourYearDays;
            Debug.Log(fourYearDays + " / " + fourYearsRest + " / " + fourYearsAmount + " / ");
            //substract the 4 year loop
            dateDay -= fourYearsAmount * fourYearDays;
            ChangeYear(fourYearsAmount * 4);

            //and now for the rest
            //actual leap state
            int actualLeapState = dateYear % 4;
            //Compare to get the leap state for the rest and loop trough the rest
            int yearsLeft = 0;
            for (int i = actualLeapState; i < actualLeapState + 4; i++)
            {
                if (dateDay < 365 || (dateDay == 365 && i == 4))
                {
                    break;
                }
                yearsLeft++;
                dateDay -= 365;
                if (i == 4)
                {
                    dateDay -= 1;
                }
            }
            ChangeYear(yearsLeft);
        }
        while (dateDay > 28)
        {
            if (dateMonth == DateMonthName.April || dateMonth == DateMonthName.June || dateMonth == DateMonthName.September || dateMonth == DateMonthName.November)
            {
                if (dateDay > 30)
                {
                    dateDay -= 30;
                }
                else
                {
                    break;
                }
            }
            else if (dateMonth == DateMonthName.February)
            {
                if (dateYear % 4 == 0)
                {
                    if (dateDay > 29)
                    {
                        dateDay -= 29;
                    }
                    else
                    {
                        break;
                    }
                }
                else
                {
                    dateDay -= 28;
                }
            }
            else
            {
                if (dateDay > 31)
                {
                    dateDay -= 31;
                }
                else
                {
                    break;
                }
            }
            ChangeMonth(1);
        }
    }