Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- namespace DateClass
- {
- class MyDate2
- {
- private const string ValueIsExceeded = "Превышено значение";
- private const string InvalidValue = "Недопустимое значение";
- private byte[] daysOfMonth = new byte[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
- private int day;
- private int month;
- private int year;
- public int Day
- {
- get { return day; }
- set
- {
- if (value >= 0)
- day = value;
- else
- throw new Exception(ValueIsExceeded);
- }
- }
- public int Month
- {
- get { return month; }
- private set
- {
- if (value >= 0)
- month = value;
- else
- throw new Exception(ValueIsExceeded);
- }
- }
- public int Year
- {
- get { return year; }
- private set
- {
- if (value >= 0)
- year = value;
- else
- throw new Exception(ValueIsExceeded);
- }
- }
- //Конструктор
- public MyDate2(int day, int month, int year)
- {
- this.Day = day;
- this.Month = month;
- this.Year = year;
- if (IsLeapYear())
- daysOfMonth[1] = 29;
- }
- #region Public methods
- public void AddDay(int i)
- {
- byte dc = daysOfMonth[month - 1];
- if (day + i > dc)
- {
- i -= Convert.ToByte(dc - day);
- day = 0;
- AddMonth(1);
- AddDay(i);
- }
- else
- {
- day += Convert.ToByte(i);
- }
- }
- public void AddMonth(int i)
- {
- int y = (int) i/12; //Получаем число, которое надо прибавть к годам
- int bc = i%12; //Получаем остаток
- year += y; //Прибавляем к годам
- if (bc == 0)
- AddMonthHelper(i);
- else if (bc > 0)
- AddMonthHelper(bc);
- }
- public void AddYear(int i)
- {
- if (i >= 0)
- year += i;
- else
- throw new Exception(InvalidValue);
- }
- //20.10.1998
- //i == 30
- //dc == 30
- public void SubDay(int i)
- {
- byte dc = daysOfMonth[month - 2]; //Количество дней в предыдущем месяце
- if (day - i < 1)
- {
- i -= day;
- SubMonth(1);
- day = Convert.ToByte(dc - i);
- SubDay(i);
- }
- else
- {
- day -= Convert.ToByte(i);
- }
- }
- public void SubMonth(int i)
- {
- int y = i/12;
- int bc = i%12;
- year -= y;
- if (bc == 0)
- SubMonthHelper(i);
- else
- SubMonthHelper(bc);
- }
- public void SubYear(int i)
- {
- if (i >= 0)
- year -= i;
- else throw new Exception(InvalidValue);
- }
- public bool IsLeapYear()
- {
- if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
- return true;
- else if (year % 4 != 0 || (year % 100 == 0 && year % 400 != 0))
- return false;
- return false;
- }
- public override string ToString()
- {
- return String.Format("{0}.{1}.{2}", day, month, year);
- }
- #endregion
- #region Private methods
- private void AddMonthHelper(int i)
- {
- int m = month;
- if (m + i > 12)
- {
- year++;
- if (m + i == 13)
- month = 1;
- else
- month = Convert.ToByte(i - 2);
- }
- else month += Convert.ToByte(i);
- }
- private void SubMonthHelper(int i)
- {
- int m = month;
- if (m - i < 1)
- {
- year--;
- if (m - i == 0)
- month = 12;
- else
- month = 12 - (i - m);
- }
- else month -= Convert.ToByte(i);
- }
- #endregion
- //Перегрузка оператора сложения
- public static MyDate2 operator +(MyDate2 md1, MyDate2 md2)
- {
- var md = new MyDate2(md1.Day, md1.Month, md1.Year);
- md.AddYear(md2.Year);
- md.AddMonth(md2.Month);
- md.AddDay(md2.Day);
- return md;
- }
- //Перегрузка оператора вычитания
- public static MyDate2 operator -(MyDate2 md1, MyDate2 md2)
- {
- return md1;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement