欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# DateTime 工具类

程序员文章站 2023-11-07 15:57:04
项目gitHub地址 点我跳转 今天给大家带来一个C#里面的时间工具类,具体的直接看下面代码 1 using System; 2 3 namespace ToolBox.DateTimeTool 4 { 5 public static class DateTimeExtend 6 { 7 /// < ......

项目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