zoukankan      html  css  js  c++  java
  • C# DateTime 工具类

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

  • 相关阅读:
    codeforces 690C3 C3. Brain Network (hard)(lca)
    codeforces 690C2 C2. Brain Network (medium)(bfs+树的直径)
    codeforces 690C1 C1. Brain Network (easy)(水题)
    codeforces 459E E. Pashmak and Graph(dp+sort)
    bzoj-1296[SCOI2009]粉刷匠(dp)
    codeforces 689E E. Mike and Geometry Problem(组合数学)
    Useful Field of View (UFOV)
    mongodb基础
    node.excel
    犀牛-6对象
  • 原文地址:https://www.cnblogs.com/xiaotimor/p/12326820.html
Copyright © 2011-2022 走看看