Projekt

Obecné

Profil

Stáhnout (3.28 KB) Statistiky
| Větev: | Tag: | Revize:
1
using System;
2
using System.Collections.Generic;
3
using System.Linq;
4
using System.Text;
5
using System.Threading.Tasks;
6

    
7
namespace ServerApp.DataDownload
8
{
9
	public class Date
10
	{
11
		public uint Month { get; }
12
		public uint Year { get; }
13
		public Date(uint month, uint year)
14
		{
15
			if (month == 0)
16
				throw new ArgumentOutOfRangeException("month", "Month must be positive and not zero.");
17
			this.Month = month;
18
			this.Year = year;
19
		}
20

    
21

    
22
		/// <summary>
23
		/// Increases the month by one. Increases year and sets month to 1 if need be.
24
		/// </summary>
25
		/// <returns>An increased date</returns>
26
		public Date IncreaseMonthByOne()
27
		{
28
			uint newMonth = Month;
29
			newMonth++;
30
			uint newYear = Year;
31
			if (newMonth > 12)
32
			{
33
				// newMonth must be 13
34
				newMonth = 1;
35
				newYear++;
36
			}
37

    
38
			return new Date(newMonth, newYear);
39
		}
40

    
41
		/// <summary>
42
		/// Parses the date given in format: 1-2020
43
		/// </summary>
44
		/// <param name="str">The string to parse</param>
45
		/// <returns>A new date</returns>
46
		public static Date ParseDate(string str)
47
		{
48

    
49
			uint month, year;
50

    
51
			string ds = str.Trim();
52
			string[] splits = ds.Split('-');
53

    
54
			if(splits.Length != 2)
55
			{
56
				Console.WriteLine("Unknown date format. Must be e.g. 1-2020.");
57
				return null;
58
			}
59

    
60
			bool monthOk = uint.TryParse(splits[0], out month);
61
			bool yearOk = uint.TryParse(splits[1], out year);
62

    
63
			if(!monthOk || !yearOk)
64
			{
65
				Console.WriteLine("Unknown date format. Must be e.g. 1-2020.");
66
				return null;
67
			}
68

    
69

    
70
			try
71
			{
72
				Date d = new Date(month, year);
73
				return d;
74
			}
75
			catch (Exception ex)
76
			{
77
				return null;
78
			}
79
			
80

    
81
			return null;
82
		}
83

    
84

    
85
		#region OVERRIDEN METHODS FOR OF THE OBJECT CLASS
86
		public override bool Equals(object obj)
87
		{
88
            if (obj is null)
89
            {
90
                return false;
91
            }
92

    
93
            if (obj.GetType() != typeof(Date))
94
				return false;
95

    
96
			Date other = obj as Date;
97
			if (other.Month == this.Month && other.Year == this.Year)
98
				return true;
99
			return false;
100
		}
101

    
102
		public override int GetHashCode()
103
		{
104
			int hashCode = -994906903;
105
			hashCode = hashCode * -1521134295 + Month.GetHashCode();
106
			hashCode = hashCode * -1521134295 + Year.GetHashCode();
107
			return hashCode;
108
		}
109

    
110
		public override string ToString()
111
		{
112
			string mon = Month > 9 ? $"{Month}" : "0" + Month;
113
			return $"{mon}-{Year}";
114
		}
115

    
116
		#endregion
117

    
118
		#region OVERLOADED OPERATORS
119
		public static bool operator >(Date d1, Date d2)
120
		{
121
			if (d1.Year > d2.Year)
122
				return true;
123
			else if (d1.Year < d2.Year)
124
				return false;
125
			else
126
			{
127
				// the years are equal
128
				if (d1.Month > d2.Month)
129
					return true;
130
				else return false;
131
			}
132

    
133
		}
134

    
135
		public static bool operator <(Date d1, Date d2)
136
		{
137
			return !(d1 >= d2);
138
		}
139

    
140

    
141
		public static bool operator >=(Date d1, Date d2)
142
		{
143
			if (d1.Year > d2.Year)
144
				return true;
145
			else if (d1.Year < d2.Year)
146
				return false;
147
			else
148
			{
149
				// the years are equal
150
				if (d1.Month > d2.Month)
151
					return true;
152
				else if (d1.Month == d2.Month)
153
					return true;
154
				else return false;
155
			}
156
		}
157

    
158
		public static bool operator <=(Date d1, Date d2)
159
		{
160
			return !(d1 > d2);
161
		}
162

    
163
		//public static bool operator ==(Date d1, Date d2)
164
		//{
165
		//	return d1.Equals(d2);
166
		//}
167

    
168
		//public static bool operator !=(Date d1, Date d2)
169
		//{
170
		//	return !d1.Equals(d2);
171
		//}
172

    
173
		#endregion
174
	}
175
}
(2-2/2)