Mercurial > silverbladetech
comparison Chronosv2/source/Extensions/DateTimeExtensions.cs @ 10:443821e55f06
Initial cleaned up add from Codeplex files
author | stevenh7776 stevenhollidge@hotmail.com |
---|---|
date | Tue, 21 Feb 2012 17:25:44 +0700 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
9:904a9faadf8b | 10:443821e55f06 |
---|---|
1 using System; | |
2 using System.Globalization; | |
3 | |
4 namespace Chronos.Extensions | |
5 { | |
6 /// <summary> | |
7 /// Extension methods for the DateTimeOffset data type. | |
8 /// </summary> | |
9 public static class DateTimeExtensions | |
10 { | |
11 #region · Extensions · | |
12 | |
13 /// <summary> | |
14 /// Calculates the age based on today. | |
15 /// </summary> | |
16 /// <param name="dateOfBirth">The date of birth.</param> | |
17 /// <returns>The calculated age.</returns> | |
18 public static int CalculateAge(this DateTime dateOfBirth) | |
19 { | |
20 return CalculateAge(dateOfBirth, DateTime.Today); | |
21 } | |
22 | |
23 /// <summary> | |
24 /// Calculates the age based on a passed reference date. | |
25 /// </summary> | |
26 /// <param name="dateOfBirth">The date of birth.</param> | |
27 /// <param name="referenceDate">The reference date to calculate on.</param> | |
28 /// <returns>The calculated age.</returns> | |
29 public static int CalculateAge(this DateTime dateOfBirth, DateTime referenceDate) | |
30 { | |
31 int years = referenceDate.Year - dateOfBirth.Year; | |
32 | |
33 if (referenceDate.Month < dateOfBirth.Month | |
34 || (referenceDate.Month == dateOfBirth.Month | |
35 && referenceDate.Day < dateOfBirth.Day)) | |
36 { | |
37 --years; | |
38 } | |
39 | |
40 return years; | |
41 } | |
42 | |
43 /// <summary> | |
44 /// Returns the number of days in the month of the provided date. | |
45 /// </summary> | |
46 /// <param name="date">The date.</param> | |
47 /// <returns>The number of days.</returns> | |
48 public static int GetCountDaysOfMonth(this DateTime date) | |
49 { | |
50 var nextMonth = date.AddMonths(1); | |
51 | |
52 return new DateTime(nextMonth.Year, nextMonth.Month, 1).AddDays(-1).Day; | |
53 } | |
54 | |
55 /// <summary> | |
56 /// Returns the first day of the month of the provided date. | |
57 /// </summary> | |
58 /// <param name="date">The date.</param> | |
59 /// <returns>The first day of the month</returns> | |
60 public static DateTime GetFirstDayOfMonth(this DateTime date) | |
61 { | |
62 return new DateTime(date.Year, date.Month, 1); | |
63 } | |
64 | |
65 /// <summary> | |
66 /// Returns the first day of the month of the provided date. | |
67 /// </summary> | |
68 /// <param name="date">The date.</param> | |
69 /// <param name="dayOfWeek">The desired day of week.</param> | |
70 /// <returns>The first day of the month</returns> | |
71 public static DateTime GetFirstDayOfMonth(this DateTime date, DayOfWeek dayOfWeek) | |
72 { | |
73 var dt = date.GetFirstDayOfMonth(); | |
74 | |
75 while (dt.DayOfWeek != dayOfWeek) | |
76 { | |
77 dt = dt.AddDays(1); | |
78 } | |
79 | |
80 return dt; | |
81 } | |
82 | |
83 /// <summary> | |
84 /// Returns the last day of the month of the provided date. | |
85 /// </summary> | |
86 /// <param name="date">The date.</param> | |
87 /// <returns>The last day of the month.</returns> | |
88 public static DateTime GetLastDayOfMonth(this DateTime date) | |
89 { | |
90 return new DateTime(date.Year, date.Month, GetCountDaysOfMonth(date)); | |
91 } | |
92 | |
93 /// <summary> | |
94 /// Returns the last day of the month of the provided date. | |
95 /// </summary> | |
96 /// <param name="date">The date.</param> | |
97 /// <param name="dayOfWeek">The desired day of week.</param> | |
98 /// <returns>The date time</returns> | |
99 public static DateTime GetLastDayOfMonth(this DateTime date, DayOfWeek dayOfWeek) | |
100 { | |
101 var dt = date.GetLastDayOfMonth(); | |
102 | |
103 while (dt.DayOfWeek != dayOfWeek) | |
104 { | |
105 dt = dt.AddDays(-1); | |
106 } | |
107 | |
108 return dt; | |
109 } | |
110 | |
111 /// <summary> | |
112 /// Indicates whether the date is today. | |
113 /// </summary> | |
114 /// <param name="dt">The date.</param> | |
115 /// <returns> | |
116 /// <c>true</c> if the specified date is today; otherwise, <c>false</c>. | |
117 /// </returns> | |
118 public static bool IsToday(this DateTime dt) | |
119 { | |
120 return (dt.Date == DateTime.Today); | |
121 } | |
122 | |
123 /// <summary> | |
124 /// Sets the time on the specified DateTime value. | |
125 /// </summary> | |
126 /// <param name="date">The base date.</param> | |
127 /// <param name="hours">The hours to be set.</param> | |
128 /// <param name="minutes">The minutes to be set.</param> | |
129 /// <param name="seconds">The seconds to be set.</param> | |
130 /// <returns>The DateTime including the new time value</returns> | |
131 public static DateTime SetTime(this DateTime date, int hours, int minutes, int seconds) | |
132 { | |
133 return date.SetTime(new TimeSpan(hours, minutes, seconds)); | |
134 } | |
135 | |
136 /// <summary> | |
137 /// Sets the time on the specified DateTime value. | |
138 /// </summary> | |
139 /// <param name="date">The base date.</param> | |
140 /// <param name="time">The TimeSpan to be applied.</param> | |
141 /// <returns> | |
142 /// The DateTime including the new time value | |
143 /// </returns> | |
144 public static DateTime SetTime(this DateTime date, TimeSpan time) | |
145 { | |
146 return date.Date.Add(time); | |
147 } | |
148 | |
149 /// <summary> | |
150 /// Converts a DateTime into a DateTimeOffset using the local system time zone. | |
151 /// </summary> | |
152 /// <param name="localDateTime">The local DateTime.</param> | |
153 /// <returns>The converted DateTimeOffset</returns> | |
154 public static DateTimeOffset ToDateTimeOffset(this DateTime localDateTime) | |
155 { | |
156 return localDateTime.ToDateTimeOffset(null); | |
157 } | |
158 | |
159 /// <summary> | |
160 /// Converts a DateTime into a DateTimeOffset using the specified time zone. | |
161 /// </summary> | |
162 /// <param name="localDateTime">The local DateTime.</param> | |
163 /// <param name="localTimeZone">The local time zone.</param> | |
164 /// <returns>The converted DateTimeOffset</returns> | |
165 public static DateTimeOffset ToDateTimeOffset(this DateTime localDateTime, TimeZoneInfo localTimeZone) | |
166 { | |
167 localTimeZone = (localTimeZone ?? TimeZoneInfo.Local); | |
168 | |
169 if (localDateTime.Kind != DateTimeKind.Unspecified) | |
170 { | |
171 localDateTime = new DateTime(localDateTime.Ticks, DateTimeKind.Unspecified); | |
172 } | |
173 | |
174 return TimeZoneInfo.ConvertTimeToUtc(localDateTime, localTimeZone); | |
175 } | |
176 | |
177 /// <summary> | |
178 /// Gets the first day of the week using the current culture. | |
179 /// </summary> | |
180 /// <param name="date">The date.</param> | |
181 /// <returns>The first day of the week</returns> | |
182 public static DateTime GetFirstDayOfWeek(this DateTime date) | |
183 { | |
184 return date.GetFirstDayOfWeek(null); | |
185 } | |
186 | |
187 /// <summary> | |
188 /// Gets the first day of the week using the specified culture. | |
189 /// </summary> | |
190 /// <param name="date">The date.</param> | |
191 /// <param name="cultureInfo">The culture to determine the first weekday of a week.</param> | |
192 /// <returns>The first day of the week</returns> | |
193 public static DateTime GetFirstDayOfWeek(this DateTime date, CultureInfo cultureInfo) | |
194 { | |
195 cultureInfo = (cultureInfo ?? CultureInfo.CurrentCulture); | |
196 | |
197 var firstDayOfWeek = cultureInfo.DateTimeFormat.FirstDayOfWeek; | |
198 | |
199 while (date.DayOfWeek != firstDayOfWeek) | |
200 { | |
201 date = date.AddDays(-1); | |
202 } | |
203 | |
204 return date; | |
205 } | |
206 | |
207 /// <summary> | |
208 /// Gets the last day of the week using the current culture. | |
209 /// </summary> | |
210 /// <param name="date">The date.</param> | |
211 /// <returns>The first day of the week</returns> | |
212 public static DateTime GetLastDayOfWeek(this DateTime date) | |
213 { | |
214 return date.GetLastDayOfWeek(null); | |
215 } | |
216 | |
217 /// <summary> | |
218 /// Gets the last day of the week using the specified culture. | |
219 /// </summary> | |
220 /// <param name="date">The date.</param> | |
221 /// <param name="cultureInfo">The culture to determine the first weekday of a week.</param> | |
222 /// <returns>The first day of the week</returns> | |
223 public static DateTime GetLastDayOfWeek(this DateTime date, CultureInfo cultureInfo) | |
224 { | |
225 return date.GetFirstDayOfWeek(cultureInfo).AddDays(6); | |
226 } | |
227 | |
228 /// <summary> | |
229 /// Gets the next occurence of the specified weekday within the current week using the current culture. | |
230 /// </summary> | |
231 /// <param name="date">The base date.</param> | |
232 /// <param name="weekday">The desired weekday.</param> | |
233 /// <returns>The calculated date.</returns> | |
234 /// <example><code> | |
235 /// var thisWeeksMonday = DateTime.Now.GetWeekday(DayOfWeek.Monday); | |
236 /// </code></example> | |
237 public static DateTime GetWeeksWeekday(this DateTime date, DayOfWeek weekday) | |
238 { | |
239 return date.GetWeeksWeekday(weekday, null); | |
240 } | |
241 | |
242 /// <summary> | |
243 /// Gets the next occurence of the specified weekday within the current week using the specified culture. | |
244 /// </summary> | |
245 /// <param name="date">The base date.</param> | |
246 /// <param name="weekday">The desired weekday.</param> | |
247 /// <param name="cultureInfo">The culture to determine the first weekday of a week.</param> | |
248 /// <returns>The calculated date.</returns> | |
249 /// <example><code> | |
250 /// var thisWeeksMonday = DateTime.Now.GetWeekday(DayOfWeek.Monday); | |
251 /// </code></example> | |
252 public static DateTime GetWeeksWeekday(this DateTime date, DayOfWeek weekday, CultureInfo cultureInfo) | |
253 { | |
254 var firstDayOfWeek = date.GetFirstDayOfWeek(cultureInfo); | |
255 | |
256 return firstDayOfWeek.GetNextWeekday(weekday); | |
257 } | |
258 | |
259 /// <summary> | |
260 /// Gets the next occurence of the specified weekday. | |
261 /// </summary> | |
262 /// <param name="date">The base date.</param> | |
263 /// <param name="weekday">The desired weekday.</param> | |
264 /// <returns>The calculated date.</returns> | |
265 /// <example><code> | |
266 /// var lastMonday = DateTime.Now.GetNextWeekday(DayOfWeek.Monday); | |
267 /// </code></example> | |
268 public static DateTime GetNextWeekday(this DateTime date, DayOfWeek weekday) | |
269 { | |
270 while (date.DayOfWeek != weekday) | |
271 { | |
272 date = date.AddDays(1); | |
273 } | |
274 | |
275 return date; | |
276 } | |
277 | |
278 /// <summary> | |
279 /// Gets the previous occurence of the specified weekday. | |
280 /// </summary> | |
281 /// <param name="date">The base date.</param> | |
282 /// <param name="weekday">The desired weekday.</param> | |
283 /// <returns>The calculated date.</returns> | |
284 /// <example><code> | |
285 /// var lastMonday = DateTime.Now.GetPreviousWeekday(DayOfWeek.Monday); | |
286 /// </code></example> | |
287 public static DateTime GetPreviousWeekday(this DateTime date, DayOfWeek weekday) | |
288 { | |
289 while (date.DayOfWeek != weekday) | |
290 { | |
291 date = date.AddDays(-1); | |
292 } | |
293 | |
294 return date; | |
295 } | |
296 | |
297 #endregion | |
298 } | |
299 } |