Advertisement
Guest User

Gigigi

a guest
Nov 24th, 2014
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.22 KB | None | 0 0
  1. using System;
  2.  
  3. namespace DateClass
  4. {
  5.     class MyDate2
  6.     {
  7.         private const string ValueIsExceeded = "Превышено значение";
  8.         private const string InvalidValue = "Недопустимое значение";
  9.  
  10.         private byte[] daysOfMonth = new byte[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
  11.  
  12.         private int day;
  13.         private int month;
  14.         private int year;
  15.  
  16.         public int Day
  17.         {
  18.             get { return day; }
  19.             set
  20.             {
  21.                 if (value >= 0)
  22.                     day = value;
  23.                 else
  24.                     throw new Exception(ValueIsExceeded);
  25.             }
  26.         }
  27.         public int Month
  28.         {
  29.             get { return month; }
  30.             private set
  31.             {
  32.                 if (value >= 0)
  33.                     month = value;
  34.                 else
  35.                     throw new Exception(ValueIsExceeded);
  36.             }
  37.         }
  38.         public int Year
  39.         {
  40.             get { return year; }
  41.             private set
  42.             {
  43.                 if (value >= 0)
  44.                     year = value;
  45.                 else
  46.                     throw new Exception(ValueIsExceeded);
  47.             }
  48.         }
  49.  
  50.         //Конструктор
  51.         public MyDate2(int day, int month, int year)
  52.         {
  53.             this.Day = day;
  54.             this.Month = month;
  55.             this.Year = year;
  56.  
  57.             if (IsLeapYear())
  58.                 daysOfMonth[1] = 29;
  59.         }
  60.  
  61.         #region Public methods
  62.  
  63.         public void AddDay(int i)
  64.         {
  65.             byte dc = daysOfMonth[month - 1];
  66.             if (day + i > dc)
  67.             {
  68.                 i -= Convert.ToByte(dc - day);
  69.                 day = 0;
  70.                 AddMonth(1);
  71.                 AddDay(i);
  72.             }
  73.             else
  74.             {
  75.                 day += Convert.ToByte(i);
  76.             }
  77.         }
  78.  
  79.         public void AddMonth(int i)
  80.         {
  81.             int y = (int) i/12; //Получаем число, которое надо прибавть к годам
  82.             int bc = i%12; //Получаем остаток
  83.            
  84.             year += y; //Прибавляем к годам
  85.  
  86.             if (bc == 0)
  87.                 AddMonthHelper(i);
  88.             else if (bc > 0)
  89.                 AddMonthHelper(bc);
  90.         }
  91.  
  92.         public void AddYear(int i)
  93.         {
  94.             if (i >= 0)
  95.                 year += i;
  96.             else
  97.                 throw new Exception(InvalidValue);
  98.         }
  99.  
  100.         //20.10.1998
  101.         //i == 30
  102.         //dc == 30
  103.         public void SubDay(int i)
  104.         {
  105.             byte dc = daysOfMonth[month - 2]; //Количество дней в предыдущем месяце
  106.             if (day - i < 1)
  107.             {
  108.                 i -= day;
  109.                 SubMonth(1);
  110.                 day = Convert.ToByte(dc - i);
  111.                 SubDay(i);
  112.             }
  113.             else
  114.             {
  115.                 day -= Convert.ToByte(i);
  116.             }
  117.         }
  118.  
  119.         public void SubMonth(int i)
  120.         {
  121.             int y = i/12;
  122.             int bc = i%12;
  123.  
  124.             year -= y;
  125.  
  126.             if (bc == 0)
  127.                 SubMonthHelper(i);
  128.             else
  129.                 SubMonthHelper(bc);
  130.         }
  131.  
  132.         public void SubYear(int i)
  133.         {
  134.             if (i >= 0)
  135.                 year -= i;
  136.             else throw new Exception(InvalidValue);
  137.         }
  138.  
  139.         public bool IsLeapYear()
  140.         {
  141.             if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
  142.                 return true;
  143.             else if (year % 4 != 0 || (year % 100 == 0 && year % 400 != 0))
  144.                 return false;
  145.  
  146.             return false;
  147.         }
  148.  
  149.         public override string ToString()
  150.         {
  151.             return String.Format("{0}.{1}.{2}", day, month, year);
  152.         }
  153.  
  154.         #endregion
  155.  
  156.         #region Private methods
  157.  
  158.         private void AddMonthHelper(int i)
  159.         {
  160.             int m = month;
  161.             if (m + i > 12)
  162.             {
  163.                 year++;
  164.                 if (m + i == 13)
  165.                     month = 1;
  166.                 else
  167.                     month = Convert.ToByte(i - 2);
  168.             }
  169.             else month += Convert.ToByte(i);
  170.         }
  171.  
  172.         private void SubMonthHelper(int i)
  173.         {
  174.             int m = month;
  175.             if (m - i < 1)
  176.             {
  177.                 year--;
  178.                 if (m - i == 0)
  179.                     month = 12;
  180.                 else
  181.                     month = 12 - (i - m);
  182.             }
  183.             else month -= Convert.ToByte(i);
  184.         }
  185.  
  186.         #endregion
  187.        
  188.         //Перегрузка оператора сложения
  189.         public static MyDate2 operator +(MyDate2 md1, MyDate2 md2)
  190.         {
  191.             var md = new MyDate2(md1.Day, md1.Month, md1.Year);
  192.             md.AddYear(md2.Year);
  193.             md.AddMonth(md2.Month);
  194.             md.AddDay(md2.Day);
  195.             return md;
  196.         }
  197.  
  198.         //Перегрузка оператора вычитания
  199.         public static MyDate2 operator -(MyDate2 md1, MyDate2 md2)
  200.         {
  201.             return md1;
  202.         }
  203.     }
  204. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement