OSDN Git Service

v1.1.6.6
[kybernetes/Kybernetes.git] / main / data / Component / TimeComponent.cs
1 using System;\r
2 \r
3 namespace com.andoutomo.kybernetes.data\r
4 {\r
5     public class TimeComponent\r
6     {\r
7         private int hour;\r
8         private int minute;\r
9 \r
10 \r
11         #region getter/setter\r
12         public int Hour\r
13         {\r
14             get { return hour; }\r
15         }\r
16         public int Minute\r
17         {\r
18             get { return minute; }\r
19         }\r
20 \r
21         public int TotalMinute\r
22         {\r
23             get { return hour * 60 + minute; }\r
24         }\r
25         public decimal TotalHour\r
26         {\r
27             get { return hour + (minute / 60); }\r
28         }\r
29         #endregion\r
30 \r
31         #region Constructor & defaultMethod\r
32         private TimeComponent(){}\r
33 \r
34         public TimeComponent(int _hour, int _minute)\r
35         {\r
36             minuteToTime(_hour * 60 + _minute);\r
37             if (this.hour != -1 && this.minute != -1) { IsValid = true; }\r
38         }\r
39 \r
40         public TimeComponent(int _totalMinute)\r
41         {\r
42             minuteToTime(_totalMinute);\r
43             if (this.hour != -1 && this.minute != -1) { IsValid = true; }\r
44         }\r
45 \r
46 \r
47         public bool IsValid\r
48         {\r
49             get;\r
50             private set;\r
51         }\r
52 \r
53         public TimeComponent(string _timeStr)\r
54         {\r
55             if (_timeStr == null || _timeStr.Equals(string.Empty))\r
56             {\r
57                 IsValid = false;\r
58                 this.hour = -1;\r
59                 this.minute = -1;\r
60                 return;\r
61             }\r
62             IsValid = true;\r
63 \r
64 \r
65             string[] data = _timeStr.Split(':');\r
66             if (data.Length >= 2)\r
67             {\r
68                 this.minuteToTime(int.Parse(data[0]) * 60 + int.Parse(data[1]));\r
69             }\r
70             else\r
71             {\r
72                 this.minuteToTime(int.Parse(data[0]));\r
73             }\r
74         }\r
75         public override int GetHashCode()\r
76         {\r
77             return base.GetHashCode();\r
78         }\r
79         public override string ToString()\r
80         {\r
81             if (IsValid)\r
82             {\r
83                 return hour.ToString("00") + ":" + minute.ToString("00");\r
84             }\r
85             return string.Empty;\r
86         }\r
87 \r
88         public override bool Equals(object obj)\r
89         {\r
90             if (!(obj is TimeComponent))\r
91             {\r
92                 return false;\r
93             }\r
94             if (base.Equals(obj))\r
95             {\r
96                 return true;\r
97             }\r
98 \r
99             return this.TotalMinute == ((TimeComponent)obj).TotalMinute;\r
100         }\r
101         #endregion\r
102 \r
103         #region Calculate\r
104         #region add\r
105         public TimeComponent add(int minute)\r
106         {\r
107             minuteToTime(minute + this.TotalMinute);\r
108             return this;\r
109         }\r
110         public TimeComponent add(int hour, int minute)\r
111         {\r
112             return add(hour * 60 + minute);\r
113             \r
114         }\r
115         public TimeComponent add(TimeComponent time)\r
116         {\r
117             return add(time.TotalMinute);\r
118             \r
119         }\r
120         #endregion\r
121 \r
122         #region subtract\r
123         public TimeComponent subtract(int _minute)\r
124         {\r
125             minuteToTime(this.TotalMinute - _minute);\r
126             return this;\r
127         }\r
128         public TimeComponent subtract(int _hour, int _minute)\r
129         {\r
130             return subtract(hour * 60 + minute);\r
131             \r
132         }\r
133         public TimeComponent subtract(TimeComponent time)\r
134         {\r
135             return subtract(time.TotalMinute);\r
136         }\r
137         #endregion\r
138 \r
139 \r
140 \r
141         private void minuteToTime(int minute)\r
142         {\r
143             decimal decData = minute;\r
144             if (decData <= 0)\r
145             {\r
146                 IsValid = false;\r
147                 this.hour = -1;\r
148                 this.minute = -1;\r
149 \r
150             }\r
151 \r
152 \r
153             this.hour = decimal.ToInt32(decimal.Divide(decData, 60));\r
154             this.minute = decimal.ToInt32(decimal.Remainder(decData, 60));\r
155         }\r
156         #endregion\r
157 \r
158         /// <summary>\r
159         /// fromのコンポーネントとの差分を算出して返却します。\r
160         /// </summary>\r
161         /// <param name="from"></param>\r
162         /// <returns></returns>\r
163         public int getSubtractionMinute(TimeComponent from)\r
164         {\r
165             if (this.TotalMinute >= from.TotalMinute)\r
166             {\r
167                 return decimal.ToInt32(Math.Abs(this.TotalMinute - from.TotalMinute));\r
168             }\r
169             else\r
170             {\r
171                 int dayOver = this.TotalMinute + (24 * 60);\r
172                 return decimal.ToInt32(Math.Abs(dayOver - from.TotalMinute));\r
173             }\r
174         }\r
175         public TimeComponent getSubtractionComponent(TimeComponent from)\r
176         {\r
177             return new TimeComponent(this.getSubtractionMinute(from));\r
178         }\r
179 \r
180         public static TimeComponent justNow()\r
181         {\r
182             return new TimeComponent(DateTime.Now.Hour, DateTime.Now.Minute);\r
183         }\r
184     }\r
185 }\r