项目gitHub地址 点我跳转
今天给大家带来一个C#里面的时间工具类,具体的直接看下面代码
1 using System;
2
3 namespace ToolBox.DateTimeTool
4 {
5 public static class DateTimeExtend
6 {
7 /// <summary>
8 /// 获取本日开始时间(0点0分0秒)
9 /// </summary>
10 /// <param name="dateTime"></param>
11 /// <returns></returns>
12 public static DateTime GetDayStart(this DateTime dateTime)
13 {
14 return dateTime.Date;
15 }
16
17 /// <summary>
18 /// 获取本日结束时间(23点59分59秒)
19 /// </summary>
20 /// <param name="dateTime"></param>
21 /// <returns></returns>
22 public static DateTime GetDayEnd(this DateTime dateTime)
23 {
24 return dateTime.Date.AddDays(1).AddMilliseconds(-1);
25 }
26
27 /// <summary>
28 /// 获取本周开始时间
29 /// </summary>
30 /// <param name="dateTime"></param>
31 /// <returns></returns>
32 public static DateTime GetWeekStart(this DateTime dateTime)
33 {
34 return dateTime.AddDays(-(int)dateTime.DayOfWeek + 1).GetDayStart();
35 }
36
37 /// <summary>
38 /// 获取本周结束时间
39 /// </summary>
40 /// <param name="dateTime"></param>
41 /// <returns></returns>
42 public static DateTime GetWeekEnd(this DateTime dateTime)
43 {
44 return dateTime.AddDays(7 - (int)dateTime.DayOfWeek).GetDayEnd();
45 }
46
47 /// <summary>
48 /// 获取本月开始时间
49 /// </summary>
50 /// <param name="dateTime"></param>
51 /// <returns></returns>
52 public static DateTime GetMonthStart(this DateTime dateTime)
53 {
54 return new DateTime(dateTime.Year, dateTime.Month, 1, 0, 0, 0, 0);
55 }
56
57 /// <summary>
58 /// 获取本月结束时间
59 /// </summary>
60 /// <param name="dateTime"></param>
61 /// <returns></returns>
62 public static DateTime GetMonthEnd(this DateTime dateTime)
63 {
64 return GetMonthStart(dateTime).AddMonths(1).AddMilliseconds(-1);
65 }
66
67 /// <summary>
68 /// 获取本季度开始时间
69 /// </summary>
70 /// <param name="dateTime"></param>
71 /// <returns></returns>
72 public static DateTime GetSeasonStart(this DateTime dateTime)
73 {
74 var time = dateTime.AddMonths(0 - ((dateTime.Month - 1) % 3));
75 return DateTime.Parse(time.AddDays(-time.Day + 1).ToString("yyyy/MM/dd 00:00:00"));
76 }
77
78 /// <summary>
79 /// 获取本季度结束时间
80 /// </summary>
81 /// <param name="dateTime"></param>
82 /// <returns></returns>
83 public static DateTime GetSeasonEnd(this DateTime dateTime)
84 {
85 var time = dateTime.AddMonths((3 - ((dateTime.Month - 1) % 3) - 1));
86 return DateTime.Parse(time.AddMonths(1).AddDays(-time.AddMonths(1).Day + 1).AddDays(-1).ToString("yyyy/MM/dd 23:59:59"));
87 }
88
89 /// <summary>
90 /// 获取本年开始时间
91 /// </summary>
92 /// <param name="dateTime"></param>
93 /// <returns></returns>
94 public static DateTime GetYearStart(this DateTime dateTime)
95 {
96 return DateTime.Parse(dateTime.AddDays(-dateTime.DayOfYear + 1).ToString("yyyy/MM/dd 00:00:00"));
97 }
98
99 /// <summary>
100 /// 获取本年结束时间
101 /// </summary>
102 /// <param name="dateTime"></param>
103 /// <returns></returns>
104 public static DateTime GetYearEnd(this DateTime dateTime)
105 {
106 var time2 = dateTime.AddYears(1);
107 return DateTime.Parse(time2.AddDays(-time2.DayOfYear).ToString("yyyy/MM/dd 23:59:59"));
108 }
109
110 /// <summary>
111 /// 北京时间转换成unix时间戳(10位/秒)
112 /// </summary>
113 /// <param name="dateTime"></param>
114 /// <returns></returns>
115 public static long BeijingTimeToUnixTimeStamp10(this DateTime dateTime)
116 {
117 return (long)(dateTime - new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds;
118 }
119
120 /// <summary>
121 /// 格林威治时间转换成unix时间戳(10位/秒)
122 /// </summary>
123 /// <param name="dateTime"></param>
124 /// <returns></returns>
125 public static long UtcTimeToUnixTimeStamp10(this DateTime dateTime)
126 {
127 return (long)(dateTime - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;
128 }
129
130 /// <summary>
131 /// 北京时间转换成unix时间戳(13位/毫秒)
132 /// </summary>
133 /// <param name="dateTime"></param>
134 /// <returns></returns>
135 public static long BeijingTimeToUnixTimeStamp13(this DateTime dateTime)
136 {
137 return (long)(dateTime - new DateTime(1970, 1, 1, 8, 0, 0)).TotalMilliseconds;
138 }
139
140 /// <summary>
141 /// 格林威治时间转换成unix时间戳(13位/毫秒)
142 /// </summary>
143 /// <param name="dateTime"></param>
144 /// <returns></returns>
145 public static long UtcTimeToUnixTimeStamp13(this DateTime dateTime)
146 {
147 return (long)(dateTime - new DateTime(1970, 1, 1, 0, 0, 0)).TotalMilliseconds;
148 }
149
150 /// <summary>
151 /// 10位unix时间戳转换成北京时间
152 /// </summary>
153 /// <param name="dateTime"></param>
154 /// <returns></returns>
155 public static DateTime UnixTimeStamp10ToBeijingTime(this long unixTimeStamp)
156 {
157 return new DateTime(1970, 1, 1, 8, 0, 0).AddSeconds(unixTimeStamp);
158 }
159
160 /// <summary>
161 /// 10位unix时间戳转换成格林威治
162 /// </summary>
163 /// <param name="dateTime"></param>
164 /// <returns></returns>
165 public static DateTime UnixTimeStamp10ToUtcTime(this long unixTimeStamp)
166 {
167 return new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(unixTimeStamp);
168 }
169
170 /// <summary>
171 /// 13位unix时间戳转换成北京时间
172 /// </summary>
173 /// <param name="dateTime"></param>
174 /// <returns></returns>
175 public static DateTime UnixTimeStamp13ToBeijingTime(this long unixTimeStamp)
176 {
177 return new DateTime(1970, 1, 1, 8, 0, 0).AddMilliseconds(unixTimeStamp);
178 }
179
180 /// <summary>
181 /// 13位unix时间戳转换成格林威治
182 /// </summary>
183 /// <param name="dateTime"></param>
184 /// <returns></returns>
185 public static DateTime UnixTimeStamp13ToUtcTime(this long unixTimeStamp)
186 {
187 return new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(unixTimeStamp);
188 }
189
190 /// <summary>
191 /// 当前日期所在月份第一个指定星期几的日期
192 /// </summary>
193 /// <param name="date">给定日期</param>
194 /// <param name="dayOfWeek">星期几</param>
195 /// <returns>所对应的日期</returns>
196 public static DateTime GetFirstWeekDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
197 {
198 var dt = date.GetMonthStart();
199 while (dt.DayOfWeek != dayOfWeek)
200 dt = dt.AddDays(1);
201
202 return dt;
203 }
204
205 /// <summary>
206 /// 当前日期所在月份最后1个指定星期几的日期
207 /// </summary>
208 /// <param name="date">给定日期</param>
209 /// <param name="dayOfWeek">星期几</param>
210 /// <returns>所对应的日期</returns>
211 public static DateTime GetLastWeekDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
212 {
213 var dt = date.GetMonthEnd();
214 while (dt.DayOfWeek != dayOfWeek)
215 dt = dt.AddDays(-1);
216
217 return dt;
218 }
219
220 /// <summary>
221 /// 判断是否比指定之间早
222 /// </summary>
223 /// <param name="date"></param>
224 /// <param name="other"></param>
225 /// <returns></returns>
226 public static bool IsBefore(this DateTime date, DateTime other)
227 {
228 return date < other;
229 }
230
231 /// <summary>
232 /// 判断是否比指定时间晚
233 /// </summary>
234 /// <param name="date"></param>
235 /// <param name="other"></param>
236 /// <returns></returns>
237 public static bool IsAfter(this DateTime date, DateTime other)
238 {
239 return date > other;
240 }
241
242 /// <summary>
243 /// 给定日期所在月份共有多少天
244 /// </summary>
245 /// <param name="date"></param>
246 /// <returns></returns>
247 public static int GetCountDaysOfMonth(this DateTime date)
248 {
249 return date.GetMonthEnd().Day;
250 }
251
252 /// <summary>
253 /// 当前日期与给定日期是否是同一天
254 /// </summary>
255 /// <param name="date">当前日期</param>
256 /// <param name="dateToCompare">给定日期</param>
257 /// <returns></returns>
258 public static bool IsDateEqual(this DateTime date, DateTime dateToCompare)
259 {
260 return date.Date == dateToCompare.Date;
261 }
262
263 /// <summary>
264 /// 是否是周未
265 /// </summary>
266 /// <param name="date"></param>
267 /// <returns></returns>
268 public static bool IsWeekend(this DateTime date)
269 {
270 return date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday;
271 }
272
273 /// <summary>
274 /// 是否是工作日
275 /// </summary>
276 /// <param name="date"></param>
277 /// <returns></returns>
278 public static bool IsWeekDay(this DateTime date)
279 {
280 return !date.IsWeekend();
281 }
282
283 /// <summary>
284 /// 判断是否为今天
285 /// </summary>
286 /// <param name="date"></param>
287 /// <returns></returns>
288 public static bool IsToday(this DateTime date)
289 {
290 return date.Date == DateTime.Now.Date;
291 }
292
293 /// <summary>
294 /// 判定公历闰年遵循的一般规律为:四年一闰,百年不闰,四百年再闰。
295 /// 公历闰年的精确计算方法:(按一回归年365天5小时48分45.5秒)
296 /// 普通年能被4整除而不能被100整除的为闰年。 (如2004年就是闰年,1900年不是闰年)
297 /// 世纪年能被400整除而不能被3200整除的为闰年。 (如2000年是闰年,3200年不是闰年)
298 /// 对于数值很大的年份能整除3200,但同时又能整除172800则又是闰年。(如172800年是闰年,86400年不是闰年)
299 /// 公元前闰年规则如下:
300 /// 非整百年:年数除4余数为1是闰年,即公元前1、5、9……年;
301 /// 整百年:年数除400余数为1是闰年,年数除3200余数为1,不是闰年,年数除172800余1又为闰年,即公元前401、801……年。
302 /// </summary>
303 /// <param name="dateTime"></param>
304 /// <returns></returns>
305 public static bool IsLeap(this DateTime dateTime)
306 {
307 var year = dateTime.Year;
308 if ((year % 400 == 0 && year % 3200 != 0)
309 || (year % 4 == 0 && year % 100 != 0)
310 || (year % 3200 == 0 && year % 172800 == 0))
311 return true;
312 else
313 return false;
314 }
315
316 /// <summary>
317 /// 获取当前年天数
318 /// </summary>
319 /// <param name="dateTime"></param>
320 /// <returns></returns>
321 public static int GetDaysByYear(this DateTime dateTime)
322 {
323 return (new DateTime(dateTime.Year + 1, 1, 1) - new DateTime(dateTime.Year, 1, 1)).Days;
324 }
325
326 /// <summary>
327 /// 获取当前年天数
328 /// </summary>
329 /// <param name="dateTime"></param>
330 /// <returns></returns>
331 public static int GetWeekCountByYear(this DateTime dateTime)
332 {
333 //找到今年的第一天是周几
334 int firstWeekend = Convert.ToInt32(DateTime.Parse(dateTime.Year + "-1-1").DayOfWeek);
335
336 //获取第一周的差额,如果是周日,则firstWeekend为0,第一周也就是从周天开始的。
337 int weekDay = firstWeekend == 0 ? 1 : (7 - firstWeekend + 1);
338
339 //获取今天是一年当中的第几天
340 int currentDay = dateTime.DayOfYear;
341
342 //(今天 减去 第一周周末)/7 等于 距第一周有多少周 再加上第一周的1 就是今天是今年的第几周了
343 // 刚好考虑了惟一的特殊情况就是,今天刚好在第一周内,那么距第一周就是0 再加上第一周的1 最后还是1
344 int current_week = Convert.ToInt32(Math.Ceiling((currentDay - weekDay) / 7.0)) + 1;
345 return current_week;
346 }
347
348 }
349 }
这个时间工具类是自己通过各种途径汇总的常用方法,需要的朋友可以自行拿走,有其他新的需求可以在评论下面告诉我,一起完善,谢谢
另外需要使用的朋友可以直接在Nuget 搜索 ToolBox.DateTimeTool 安装使用即可 支持NET Framework 以及Net core
来源:https://www.cnblogs.com/xiaotimor/archive/2020/02/18/12326820.html