• C# 日期格式化以及日期常用方法


    一、日期格式化

    1.ToString()

    d 月中的某一天。一位数的日期没有前导零。 
    dd 月中的某一天。一位数的日期有一个前导零。 
    ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。 
    dddd 周中某天的完整名称,在 DayNames 中定义。 
    M 月份数字。一位数的月份没有前导零。 
    MM 月份数字。一位数的月份有一个前导零。 
    MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。 
    MMMM 月份的完整名称,在 MonthNames 中定义。 
    y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。 
    yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。 
    yyyy 包括纪元的四位数的年份。 
    gg 时期或纪元。如果要设置格式的日期不具有关联的时期或纪元字符串,则忽略该模式。 
    h 12 小时制的小时。一位数的小时数没有前导零。 
    hh 12 小时制的小时。一位数的小时数有前导零。 
    H 24 小时制的小时。一位数的小时数没有前导零。 
    HH 24 小时制的小时。一位数的小时数有前导零。 
    m 分钟。一位数的分钟数没有前导零。 
    mm 分钟。一位数的分钟数有一个前导零。 
    s 秒。一位数的秒数没有前导零。 
    ss 秒。一位数的秒数有一个前导零。 
    f 秒的小数精度为一位。其余数字被截断。 
    ff 秒的小数精度为两位。其余数字被截断。 
    fff 秒的小数精度为三位。其余数字被截断。 
    ffff 秒的小数精度为四位。其余数字被截断。 
    fffff 秒的小数精度为五位。其余数字被截断。 
    ffffff 秒的小数精度为六位。其余数字被截断。 
    fffffff 秒的小数精度为七位。其余数字被截断。 
    t 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项的第一个字符(如果存在)。 
    tt 在 AMDesignator 或 PMDesignator 中定义的 AM/PM 指示项(如果存在)。 
    z 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数没有前导零。例如,太平洋标准时间是“-8”。 
    zz 时区偏移量(“+”或“-”后面仅跟小时)。一位数的小时数有前导零。例如,太平洋标准时间是“-08”。 
    zzz 完整时区偏移量(“+”或“-”后面跟有小时和分钟)。一位数的小时数和分钟数有前导零。例如,太平洋标准时间是“-08:00”。 
    : 在 TimeSeparator 中定义的默认时间分隔符。 
    / 在 DateSeparator 中定义的默认日期分隔符。 
    % c 其中 c 是格式模式(如果单独使用)。如果格式模式与原义字符或其他格式模式合并,则可以省略“%”字符。 
     c 其中 c 是任意字符。照原义显示字符。若要显示反斜杠字符,请使用“”。 
    
    只有上面第二个表中列出的格式模式才能用于创建自定义模式;在第一个表中列出的标准格式字符不能用于创建自定义模式。自定义模式的长度至少为两个字符;例如, 
    
    DateTime.ToString( "d") 返回 DateTime 值;“d”是标准短日期模式。 
    DateTime.ToString( "%d") 返回月中的某天;“%d”是自定义模式。 
    DateTime.ToString( "d ") 返回后面跟有一个空白字符的月中的某天;“d”是自定义模式。 
    
    比较方便的是,上面的参数可以随意组合,并且不会出错,多试试,肯定会找到你要的时间格式
    如要得到2005年06月 这样格式的时间
    可以这样写:
    date.ToString("yyyy年MM月", DateTimeFormatInfo.InvariantInfo)

    2、

    DateTime dt = DateTime.Now;
    Label1.Text = dt.ToString();//2005-11-5 13:21:25
    Label2.Text = dt.ToFileTime().ToString();//127756416859912816
    Label3.Text = dt.ToFileTimeUtc().ToString();//127756704859912816
    Label4.Text = dt.ToLocalTime().ToString();//2005-11-5 21:21:25
    Label5.Text = dt.ToLongDateString().ToString();//2005年11月5日
    Label6.Text = dt.ToLongTimeString().ToString();//13:21:25
    Label7.Text = dt.ToOADate().ToString();//38661.5565508218
    Label8.Text = dt.ToShortDateString().ToString();//2005-11-5
    Label9.Text = dt.ToShortTimeString().ToString();//13:21
    Label10.Text = dt.ToUniversalTime().ToString();//2005-11-5 5:21:25
    
    Label1.Text = dt.Year.ToString();//2005
    Label2.Text = dt.Date.ToString();//2005-11-5 0:00:00
    Label3.Text = dt.DayOfWeek.ToString();//Saturday
    Label4.Text = dt.DayOfYear.ToString();//309
    Label5.Text = dt.Hour.ToString();//13
    Label6.Text = dt.Millisecond.ToString();//441
    Label7.Text = dt.Minute.ToString();//30
    Label8.Text = dt.Month.ToString();//11
    Label9.Text = dt.Second.ToString();//28
    Label10.Text = dt.Ticks.ToString();//632667942284412864
    Label11.Text = dt.TimeOfDay.ToString();//13:30:28.4412864
    
    Label1.Text = dt.ToString();//2005-11-5 13:47:04
    Label2.Text = dt.AddYears(1).ToString();//2006-11-5 13:47:04
    Label3.Text = dt.AddDays(1.1).ToString();//2005-11-6 16:11:04
    Label4.Text = dt.AddHours(1.1).ToString();//2005-11-5 14:53:04
    Label5.Text = dt.AddMilliseconds(1.1).ToString();//2005-11-5 13:47:04
    Label6.Text = dt.AddMonths(1).ToString();//2005-12-5 13:47:04
    Label7.Text = dt.AddSeconds(1.1).ToString();//2005-11-5 13:47:05
    Label8.Text = dt.AddMinutes(1.1).ToString();//2005-11-5 13:48:10
    Label9.Text = dt.AddTicks(1000).ToString();//2005-11-5 13:47:04
    Label10.Text = dt.CompareTo(dt).ToString();//0
    Label11.Text = dt.Add(?).ToString();//问号为一个时间段
    
    Label1.Text = dt.Equals("2005-11-6 16:11:04").ToString();//False
    Label2.Text = dt.Equals(dt).ToString();//True
    Label3.Text = dt.GetHashCode().ToString();//1474088234
    Label4.Text = dt.GetType().ToString();//System.DateTime
    Label5.Text = dt.GetTypeCode().ToString();//DateTime
    
    Label1.Text = dt.GetDateTimeFormats('s')[0].ToString();//2005-11-05T14:06:25
    Label2.Text = dt.GetDateTimeFormats('t')[0].ToString();//14:06
    Label3.Text = dt.GetDateTimeFormats('y')[0].ToString();//2005年11月
    Label4.Text = dt.GetDateTimeFormats('D')[0].ToString();//2005年11月5日
    Label5.Text = dt.GetDateTimeFormats('D')[1].ToString();//2005 11 05
    Label6.Text = dt.GetDateTimeFormats('D')[2].ToString();//星期六 2005 11 05
    Label7.Text = dt.GetDateTimeFormats('D')[3].ToString();//星期六 2005年11月5日
    Label8.Text = dt.GetDateTimeFormats('M')[0].ToString();//11月5日
    Label9.Text = dt.GetDateTimeFormats('f')[0].ToString();//2005年11月5日 14:06
    Label10.Text = dt.GetDateTimeFormats('g')[0].ToString();//2005-11-5 14:06
    Label11.Text = dt.GetDateTimeFormats('r')[0].ToString();//Sat, 05 Nov 2005 14:06:25 GMT
    
    Label1.Text = string.Format("{0:d}",dt);//2005-11-5
    Label2.Text = string.Format("{0:D}",dt);//2005年11月5日
    Label3.Text = string.Format("{0:f}",dt);//2005年11月5日 14:23
    Label4.Text = string.Format("{0:F}",dt);//2005年11月5日 14:23:23
    Label5.Text = string.Format("{0:g}",dt);//2005-11-5 14:23
    Label6.Text = string.Format("{0:G}",dt);//2005-11-5 14:23:23
    Label7.Text = string.Format("{0:M}",dt);//11月5日
    Label8.Text = string.Format("{0:R}",dt);//Sat, 05 Nov 2005 14:23:23 GMT
    Label9.Text = string.Format("{0:s}",dt);//2005-11-05T14:23:23
    Label10.Text   string.Format("{0:t}",dt);//14:23
    Label11.Text = string.Format("{0:T}",dt);//14:23:23
    Label12.Text = string.Format("{0:u}",dt);//2005-11-05 14:23:23Z
    Label13.Text = string.Format("{0:U}",dt);//2005年11月5日 6:23:23
    Label14.Text = string.Format("{0:Y}",dt);//2005年11月
    Label15.Text = string.Format("{0}",dt);//2005-11-5 14:23:23
    Label16.Text = string.Format("{0:yyyyMMddHHmmssffff}",dt);

    二。比较时间大小

    //比较时间大小的实验
        string st1="12:13";
        string st2="14:14";
        DateTime dt1=Convert.ToDateTime(st1);
        DateTime dt2=Convert.ToDateTime(st2);
        DateTime dt3=DateTime.Now;
        if(DateTime.Compare(dt1,dt2)>0)
         msg.Text=st1+">"+st2;
        else
         msg.Text=st1+"<"+st2;
        msg.Text+="
    "+dt1.ToString();
        if(DateTime.Compare(dt1,dt3)>0)
         msg.Text+="
    "+st1+">"+dt3.ToString();
        else
         msg.Text+="
    "+st1+"<"+dt3.ToString();
    
    //计算两个时间差值的函数,返回时间差的绝对值:
             private string DateDiff(DateTime DateTime1,DateTime DateTime2)
             {
                 string dateDiff=null;
                 try
                 {
                     TimeSpan ts1=new   TimeSpan(DateTime1.Ticks);
                     TimeSpan ts2=new   TimeSpan(DateTime2.Ticks);
                     TimeSpan ts=ts1.Subtract(ts2).Duration();
                     dateDiff=ts.Days.ToString()+""
                             +ts.Hours.ToString()+"小时"
                             +ts.Minutes.ToString()+"分钟"
                             +ts.Seconds.ToString()+"";
                 }
                 catch
                 {
                 }
                 return dateDiff;
             }
    //实现计算DateTime1-36天=DateTime2的功能
    
        TimeSpan ts=new TimeSpan(40,0,0,0);
        DateTime dt2=DateTime.Now.Subtract(ts);
        msg.Text=DateTime.Now.ToString()+"-"+ts.Days.ToString()+"";
        msg.Text+=dt2.ToString();

    三。日期格式常用方法

    Add将指定的TimeSpan的值加到实例的值上
    
    AddHours将指定的小时数加到实例的值上
    
    AddMilliseconds将指定的毫秒数加到实例的值上
    
    AddMinutes将指定的分钟数加到实例的值上
    
    AddMonths将指定的月份数加到实例的值上
    
    AddSeconds将指定的秒数加到实例的值上
    
    AddYears将指定的年份加到实例的值上

    四。日期获取星期几

    string[] Day = new string[] { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
    string week = Day[Convert.ToInt32(DateTime.Now.DayOfWeek.ToString("d"))].ToString();
    
    
    //获取日期对应的星期数字
    DateTime time=DateTime.Now;
    int week =(int)time.DayOfWeek;

    日期格式化:

    一、获取时间的年月日
    datetime.now.year提取年
    datetime.now.month提取月份
    datetime.now.day提取日
    (提取的时间为你电脑系统的时间)
    二、时间格式的转换(string类型转换成日期类型)
    datetime1=to_date('{1}','YYYY-MM-DD HH24:MI:SS')
    datetime2=to_date('{2}','YYYY-MM-DD hh24')
    datetime3=to_date('{3}','YYYY-MM-DD')
     
    日期类型转换为字符串类型
    dateTime.ToString("YYYY-MM-DD HH:MM:SS")
    例如:
     string sql = string.Format("insert into CU_UP_DOWN_FRAME values(to_date('{7}','YYYY-MM-DD HH24:MI:SS')");
    三、日期的加减
    1、DateTime.Now.AddDays(-1):当前日期的前一天
    2、DateTime.Now. AddHours(1):当前时间的后一小时
    3、DateTime.Now.AddDays(-7):当前日期的上一周
    四、获取某一日期是该年的第几周
    private int GetWeekOfYear(DateTime dt)
    {
    GregorianCalendar gc = new GregorianCalendar();
    return gc.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday);
    }
    五、计算2个日期之间的天数差 
    DateTime dt1 = Convert.DateTime("2007-8-1"); 
    DateTime dt2 = Convert.DateTime("2007-8-15"); 
    TimeSpan span = dt2.Subtract(dt1); 
    int dayDiff = span.Days + 1; 
    span.TotalDays;//
     
    span.TotalHours;//小时
     
    span.TotalMinutes;//分钟
     
    span.TotalSeconds;//
    TimeSpan 结构  表示一个时间间隔。
    命名空间:System 程序集:mscorlib(在 mscorlib.dll 中)
    说明: 1.DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月31日23点59分59秒之间的具体日期时刻。因此,你可以用DateTime值类型来描述任何在想象范围之内的时间。TimeSpan值包含了许多属性与方法,用于访问或处理一个TimeSpan值,
    其中的五个重载方法之一的结构 TimeSpan( int days, int hours, int minutes, int seconds )
    下面的列表涵盖了其中的一部分方法及属性解释
    Add:与另一个TimeSpan值相加。
    Days:返回用天数计算的TimeSpan值。
    Duration:获取TimeSpan的绝对值。
    Hours:返回用小时计算的TimeSpan值
    Milliseconds:返回用毫秒计算的TimeSpan值。
    Minutes:返回用分钟计算的TimeSpan值。
    Negate:返回当前实例的相反数。
    Seconds:返回用秒计算的TimeSpan值。
    Subtract:从中减去另一个TimeSpan值。
    Ticks:返回TimeSpan值的tick数。
    TotalDays:返回TimeSpan值表示的天数。
    TotalHours:返回TimeSpan值表示的小时数。
    TotalMilliseconds:返回TimeSpan值表示的毫秒数。
    TotalMinutes:返回TimeSpan值表示的分钟数。
    TotalSeconds:返回TimeSpan值表示的秒数。
    日期格式化
    using System;
    
    namespace ToolBox.DateTimeTool
    {
        public static class DateTimeExtend
        {
            /// <summary>
            /// 获取本日开始时间(0点0分0秒)
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetDayStart(this DateTime dateTime)
            {
                return dateTime.Date;
            }
    
            /// <summary>
            /// 获取本日结束时间(23点59分59秒)
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetDayEnd(this DateTime dateTime)
            {
                return dateTime.Date.AddDays(1).AddMilliseconds(-1);
            }
    
            /// <summary>
            /// 获取本周开始时间
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetWeekStart(this DateTime dateTime)
            {
                return dateTime.AddDays(-(int)dateTime.DayOfWeek + 1).GetDayStart();
            }
    
            /// <summary>
            /// 获取本周结束时间
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetWeekEnd(this DateTime dateTime)
            {
                return dateTime.AddDays(7 - (int)dateTime.DayOfWeek).GetDayEnd();
            }
    
            /// <summary>
            /// 获取本月开始时间
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetMonthStart(this DateTime dateTime)
            {
                return new DateTime(dateTime.Year, dateTime.Month, 1, 0, 0, 0, 0);
            }
    
            /// <summary>
            /// 获取本月结束时间
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetMonthEnd(this DateTime dateTime)
            {
                return GetMonthStart(dateTime).AddMonths(1).AddMilliseconds(-1);
            }
    
            /// <summary>
            /// 获取本季度开始时间
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetSeasonStart(this DateTime dateTime)
            {
                var time = dateTime.AddMonths(0 - ((dateTime.Month - 1) % 3));
                return DateTime.Parse(time.AddDays(-time.Day + 1).ToString("yyyy/MM/dd 00:00:00"));
            }
    
            /// <summary>
            /// 获取本季度结束时间
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetSeasonEnd(this DateTime dateTime)
            {
                var time = dateTime.AddMonths((3 - ((dateTime.Month - 1) % 3) - 1));
                return DateTime.Parse(time.AddMonths(1).AddDays(-time.AddMonths(1).Day + 1).AddDays(-1).ToString("yyyy/MM/dd 23:59:59"));
            }
    
            /// <summary>
            /// 获取本年开始时间
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetYearStart(this DateTime dateTime)
            {
                return DateTime.Parse(dateTime.AddDays(-dateTime.DayOfYear + 1).ToString("yyyy/MM/dd 00:00:00"));
            }
    
            /// <summary>
            /// 获取本年结束时间
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime GetYearEnd(this DateTime dateTime)
            {
                var time2 = dateTime.AddYears(1);
                return DateTime.Parse(time2.AddDays(-time2.DayOfYear).ToString("yyyy/MM/dd 23:59:59"));
            }
    
            /// <summary>
            /// 北京时间转换成unix时间戳(10位/秒)
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static long BeijingTimeToUnixTimeStamp10(this DateTime dateTime)
            {
                return (long)(dateTime - new DateTime(1970, 1, 1, 8, 0, 0)).TotalSeconds;
            }
    
            /// <summary>
            /// 格林威治时间转换成unix时间戳(10位/秒)
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static long UtcTimeToUnixTimeStamp10(this DateTime dateTime)
            {
                return (long)(dateTime - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;
            }
    
            /// <summary>
            /// 北京时间转换成unix时间戳(13位/毫秒)
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static long BeijingTimeToUnixTimeStamp13(this DateTime dateTime)
            {
                return (long)(dateTime - new DateTime(1970, 1, 1, 8, 0, 0)).TotalMilliseconds;
            }
    
            /// <summary>
            /// 格林威治时间转换成unix时间戳(13位/毫秒)
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static long UtcTimeToUnixTimeStamp13(this DateTime dateTime)
            {
                return (long)(dateTime - new DateTime(1970, 1, 1, 0, 0, 0)).TotalMilliseconds;
            }
    
            /// <summary>
            /// 10位unix时间戳转换成北京时间
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime UnixTimeStamp10ToBeijingTime(this long unixTimeStamp)
            {
                return new DateTime(1970, 1, 1, 8, 0, 0).AddSeconds(unixTimeStamp);
            }
    
            /// <summary>
            /// 10位unix时间戳转换成格林威治
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime UnixTimeStamp10ToUtcTime(this long unixTimeStamp)
            {
                return new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(unixTimeStamp);
            }
    
            /// <summary>
            /// 13位unix时间戳转换成北京时间
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime UnixTimeStamp13ToBeijingTime(this long unixTimeStamp)
            {
                return new DateTime(1970, 1, 1, 8, 0, 0).AddMilliseconds(unixTimeStamp);
            }
    
            /// <summary>
            /// 13位unix时间戳转换成格林威治
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static DateTime UnixTimeStamp13ToUtcTime(this long unixTimeStamp)
            {
                return new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(unixTimeStamp);
            }
    
            /// <summary>
            /// 当前日期所在月份第一个指定星期几的日期
            /// </summary>
            /// <param name="date">给定日期</param>
            /// <param name="dayOfWeek">星期几</param>
            /// <returns>所对应的日期</returns>
            public static DateTime GetFirstWeekDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
            {
                var dt = date.GetMonthStart();
                while (dt.DayOfWeek != dayOfWeek)
                    dt = dt.AddDays(1);
    
                return dt;
            }
    
            /// <summary>
            /// 当前日期所在月份最后1个指定星期几的日期
            /// </summary>
            /// <param name="date">给定日期</param>
            /// <param name="dayOfWeek">星期几</param>
            /// <returns>所对应的日期</returns>
            public static DateTime GetLastWeekDayOfMonth(this DateTime date, DayOfWeek dayOfWeek)
            {
                var dt = date.GetMonthEnd();
                while (dt.DayOfWeek != dayOfWeek)
                    dt = dt.AddDays(-1);
    
                return dt;
            }
    
            /// <summary>
            /// 判断是否比指定之间早
            /// </summary>
            /// <param name="date"></param>
            /// <param name="other"></param>
            /// <returns></returns>
            public static bool IsBefore(this DateTime date, DateTime other)
            {
                return date < other;
            }
    
            /// <summary>
            /// 判断是否比指定时间晚
            /// </summary>
            /// <param name="date"></param>
            /// <param name="other"></param>
            /// <returns></returns>
            public static bool IsAfter(this DateTime date, DateTime other)
            {
                return date > other;
            }
    
            /// <summary>
            /// 给定日期所在月份共有多少天
            /// </summary>
            /// <param name="date"></param>
            /// <returns></returns>
            public static int GetCountDaysOfMonth(this DateTime date)
            {
                return date.GetMonthEnd().Day;
            }
    
            /// <summary>
            /// 当前日期与给定日期是否是同一天
            /// </summary>
            /// <param name="date">当前日期</param>
            /// <param name="dateToCompare">给定日期</param>
            /// <returns></returns>
            public static bool IsDateEqual(this DateTime date, DateTime dateToCompare)
            {
                return date.Date == dateToCompare.Date;
            }
    
            /// <summary>
            /// 是否是周未
            /// </summary>
            /// <param name="date"></param>
            /// <returns></returns>
            public static bool IsWeekend(this DateTime date)
            {
                return date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday;
            }
    
            /// <summary>
            /// 是否是工作日
            /// </summary>
            /// <param name="date"></param>
            /// <returns></returns>
            public static bool IsWeekDay(this DateTime date)
            {
                return !date.IsWeekend();
            }
    
            /// <summary>
            /// 判断是否为今天
            /// </summary>
            /// <param name="date"></param>
            /// <returns></returns>
            public static bool IsToday(this DateTime date)
            {
                return date.Date == DateTime.Now.Date;
            }
    
            /// <summary>
            /// 判定公历闰年遵循的一般规律为:四年一闰,百年不闰,四百年再闰。
            /// 公历闰年的精确计算方法:(按一回归年365天5小时48分45.5秒)
            /// 普通年能被4整除而不能被100整除的为闰年。 (如2004年就是闰年,1900年不是闰年)
            /// 世纪年能被400整除而不能被3200整除的为闰年。 (如2000年是闰年,3200年不是闰年)
            /// 对于数值很大的年份能整除3200,但同时又能整除172800则又是闰年。(如172800年是闰年,86400年不是闰年)
            /// 公元前闰年规则如下:
            /// 非整百年:年数除4余数为1是闰年,即公元前1、5、9……年;
            /// 整百年:年数除400余数为1是闰年,年数除3200余数为1,不是闰年,年数除172800余1又为闰年,即公元前401、801……年。
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static bool IsLeap(this DateTime dateTime)
            {
                var year = dateTime.Year;
                if ((year % 400 == 0 && year % 3200 != 0)
                   || (year % 4 == 0 && year % 100 != 0)
                   || (year % 3200 == 0 && year % 172800 == 0))
                    return true;
                else
                    return false;
            }
    
            /// <summary>
            /// 获取当前年天数
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static int GetDaysByYear(this DateTime dateTime)
            {
                return (new DateTime(dateTime.Year + 1, 1, 1) - new DateTime(dateTime.Year, 1, 1)).Days;
            }
    
            /// <summary>
            /// 获取当前年天数
            /// </summary>
            /// <param name="dateTime"></param>
            /// <returns></returns>
            public static int GetWeekCountByYear(this DateTime dateTime)
            {
                //找到今年的第一天是周几
                int firstWeekend = Convert.ToInt32(DateTime.Parse(dateTime.Year + "-1-1").DayOfWeek);
    
                //获取第一周的差额,如果是周日,则firstWeekend为0,第一周也就是从周天开始的。
                int weekDay = firstWeekend == 0 ? 1 : (7 - firstWeekend + 1);
    
                //获取今天是一年当中的第几天
                int currentDay = dateTime.DayOfYear;
    
                //(今天 减去 第一周周末)/7 等于 距第一周有多少周 再加上第一周的1 就是今天是今年的第几周了
                //    刚好考虑了惟一的特殊情况就是,今天刚好在第一周内,那么距第一周就是0 再加上第一周的1 最后还是1
                int current_week = Convert.ToInt32(Math.Ceiling((currentDay - weekDay) / 7.0)) + 1;
                return current_week;
            }
    
        }
    }
    C# DateTime 工具类

    转自于:https://www.cnblogs.com/zhang1f/p/11104743.html

    认真工作、认真生活,努力做最好的自己!!!
  • 相关阅读:
    【leetcode】1295. Find Numbers with Even Number of Digits
    【leetcode】427. Construct Quad Tree
    【leetcode】1240. Tiling a Rectangle with the Fewest Squares
    【leetcode】1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold
    【leetcode】1291. Sequential Digits
    【leetcode】1290. Convert Binary Number in a Linked List to Integer
    【leetcode】1269. Number of Ways to Stay in the Same Place After Some Steps
    【leetcode】1289. Minimum Falling Path Sum II
    【leetcode】1288. Remove Covered Intervals
    【leetcode】1287. Element Appearing More Than 25% In Sorted Array
  • 原文地址:https://www.cnblogs.com/songhuihui/p/12395430.html
Copyright © 2020-2023  润新知