Создание дата сумматор


Мы думаем о том, чтобы нанять больше разработчиков, поэтому меня попросили написать тест. Я долго искал в интернете для идей. Я нашел этот вопрос: https://stackoverflow.com/questions/23534528/how-to-add-n-days-to-a-date-in-java-without-importing-date-calendar-from-java-ap. Я попытался это себе следующим образом:

public class Date : IEquatable<Date>
    {
        private readonly static int[] _daysInMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
        private readonly int _month;
        private readonly int _day;
        private readonly int _year;

        public Date(int day, int month, int year)
        {
            this._day = day;
            this._month = month;
            this._year = year;
        }

        //static because thinking about using in constructor for validation.
        public static int MaxDays(int month, int year)
        {
            int maxDays = _daysInMonth[month - 1];
            if (month == 2)
            {
                if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0)))
                    maxDays = maxDays + 1;
            }
            return maxDays;
        }

        public Date AddDays(int daysToAdd)
        {
            int day = this._day + daysToAdd;
            int month = this._month;
            int year = this._year;
            while (day > MaxDays(month,year))
            {
                day = day - MaxDays(month,year);
                month++;
                if (month > 12)
                {
                    year++;
                    month = 1;
                }
            }
            return new Date(day, month, year);
        }

        public override bool Equals(object obj)
        {
            return Equals(obj as Date);
        }

        public override int GetHashCode()
        {
            unchecked
            {
                int hash = 17;
                hash = hash * 23 + _day.GetHashCode();
                hash = hash * 23 + _month.GetHashCode();
                hash = hash * 23 + _year.GetHashCode();
                return hash;
            }
        }

        public static bool operator ==(Date date1, Date date2)
        {
            if (ReferenceEquals(date1, null) && ReferenceEquals(date2, null))
                return true;
            if (ReferenceEquals(date1, null) || ReferenceEquals(date2, null))
                return false;
            return date1.Equals(date2);
        }

        public static bool operator !=(Date date1, Date date2)
        {
            return !(date1 == date2);
        }

        public bool Equals(Date other)
        {
            if (ReferenceEquals(other, null))
                return false;
            return _day == other._day && _month == other._month && _year == other._year;
        }
    }

Буду благодарен за комментарии. Я ознакомился с условиями размещения здесь: https://codereview.stackexchange.com/help/on-topic. Это реальный код (без заглушек), которая работает и поэтому я считаю, что это по теме.



107
0
c#
задан 27 февраля 2018 в 08:02 Источник Поделиться
Комментарии