コード例 #1
0
ファイル: DateD.cs プロジェクト: fantomilya/Courses
        public static DateD operator +(DateD d, int days)
        {
            int daysRemain = Math.Abs(days);

            DateD result = new DateD(d.Year, d.Month, d.Day);

            while (daysRemain > 0)
            {
                if (days > 0)
                {
                    int count = DaysInMonth(result.Month, result.Year) - result.Day;
                    if (daysRemain > count)
                    {
                        daysRemain -= count + 1;
                        result.Month++;
                        result.Day = 1;
                        if (result.Month > 12)
                        {
                            result.Year++;
                            result.Month = 1;
                        }
                    }
                    else
                    {
                        result.Day += daysRemain;
                        break;
                    }
                }
                else
                {
                    int count = result.Day;
                    if (daysRemain >= count)
                    {
                        daysRemain -= count;
                        result.Month--;
                        result.Day = DaysInMonth(result.Month, result.Year);
                        if (result.Month < 1)
                        {
                            result.Year--;
                            result.Month = 12;
                        }
                    }
                    else
                    {
                        result.Day -= daysRemain;
                        break;
                    }
                }
            }

            return(result);
        }
コード例 #2
0
ファイル: DateD.cs プロジェクト: fantomilya/Courses
        public static int operator -(DateD d1, DateD d2)
        {
            DateD dateMin  = d1 < d2 ? d1 : d2;
            DateD dateMax  = d1 > d2 ? d1 : d2;
            int   monthTmp = dateMin.Month;
            int   YearTmp  = dateMin.Year;
            int   res      = dateMax.Day - dateMin.Day;

            while (monthTmp != dateMax.Month || YearTmp != dateMax.Year)
            {
                res += DaysInMonth(monthTmp, YearTmp);
                monthTmp++;
                if (monthTmp > 12)
                {
                    monthTmp = 1;
                    YearTmp++;
                }
            }
            return(d1 > d2 ? res : -res);
        }