Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApp9
- {
- class MyData
- {
- int[] datearr = { 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 303, 334 };
- public enum Days { Sunday, Monday, Tuesday, Wensday, Thursday, Friday, Sataday };
- int day;
- public int Day { get; }
- int mounth;
- public int Mounth { get; }
- int year;
- public int Year { get; }
- public MyData(int year, int mounth, int day)
- {
- this.year = year;
- this.mounth = mounth;
- this.day = day;
- }
- public MyData()
- {
- this.year = 1;
- this.mounth = 1;
- this.day = 1;
- }
- public Days WhatDay()
- {
- int a = (14 - mounth) / 12;
- int y = year - a;
- int m = mounth + 12 * a - 2;
- int result = (day + y + y / 4 - y / 100 + y / 400 + (31 * m) / 12) % 7;
- Days weakDay = (Days)result;
- return weakDay;
- }
- static bool IsYearLeap(int year)
- {
- if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
- return true;
- else
- return false;
- }
- public int NumberOfLeapYears(int year)
- {
- int counter = 0;
- for (int years = 0; years <= year; years++)
- counter += MyData.IsYearLeap(years) ? 1 : 0;
- return counter;
- }
- public int NumberOfDays()
- {
- int days;
- if (this.mounth > 2)
- {
- days = NumberOfLeapYears(this.year - 1);
- }
- else
- {
- days = NumberOfLeapYears(this.year);
- }
- days += 365 * (this.year - 1);
- days += datearr[this.mounth];
- days += this.day;
- return days;
- }
- private int DayInMonths(int month, int year)
- {
- int[] days = new int[12] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
- if (IsYearLeap(year))
- days[1] = 29;
- return days[month - 1];
- }
- public MyData(int days)
- {
- if (day < 0)
- throw new Exception("InvalidDataExeption.DataOutOfRange");
- else
- {
- int years = 0;
- int i = days;
- int month = 0;
- int countLeapYear = 0;
- do
- {
- if (IsYearLeap(years))
- {
- i -= 366;
- countLeapYear++;
- }
- else
- i -= 365;
- years++;
- } while (i > 1);
- int lostDays = days - ((years - 1) * 365 + countLeapYear);
- for (month = 1; lostDays > DayInMonths(month, years); month++)
- {
- lostDays -= DayInMonths(month, years);
- }
- day = lostDays;
- this.mounth = month;
- year = years;
- }
- }
- public static int operator - (MyData date, MyData other)
- {
- int sumOfDaysDate = date.NumberOfDays();
- int sumOfDaysOther = other.NumberOfDays();
- return sumOfDaysDate - sumOfDaysOther;
- }
- public static MyData operator + (MyData date, int days)
- {
- int sumOfDays = date.NumberOfDays() + days;
- MyData newdate = new MyData(sumOfDays);
- return newdate;
- }
- public static MyData operator ++ (MyData date)
- {
- int days = date.NumberOfDays();
- days++;
- MyData newdate = new MyData(days);
- return newdate;
- }
- public static MyData operator --(MyData date)
- {
- int days = date.NumberOfDays();
- days--;
- MyData newdate = new MyData(days);
- return newdate;
- }
- public static bool operator > (MyData date, MyData other)
- {
- int myDate = date.NumberOfDays();
- int otherDate = other.NumberOfDays();
- return myDate > otherDate;
- }
- public static bool operator <(MyData date, MyData other)
- {
- int myDate = date.NumberOfDays();
- int otherDate = other.NumberOfDays();
- return myDate < otherDate;
- }
- public static bool operator == (MyData date, MyData other)
- {
- int myDate = date.NumberOfDays();
- int otherDate = other.NumberOfDays();
- return myDate == otherDate;
- }
- public static bool operator !=(MyData date, MyData other)
- {
- int myDate = date.NumberOfDays();
- int otherDate = other.NumberOfDays();
- return myDate != otherDate;
- }
- public override string ToString()
- {
- return $"{day}, {mounth}, {year}, {WhatDay()};";
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- MyData calendar = new MyData(2019, 4, 27);
- Console.WriteLine(calendar.ToString());
- Console.WriteLine(calendar.NumberOfDays());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement