支持库:DateTime扩展

    public static class DateTimeExtensions
    {
        /// <summary>
        /// 获取格式化日期,默认为 yyyy-mm-dd h:m:s
        /// yyyy:数字年份,m/mm数字月,d/dd数字日
        /// YYYY:汉字年份,如二〇一二,M/MM汉字月,D/DD汉字日
        /// </summary>
        /// <param name="dt">要处理的日期时间</param>
        /// <param name="sFormat">格式化字符串,以ymd,hms,W为主要变量</param>
        /// <returns></returns>
        public static string Format(this DateTime dt,string sFormat)
        {
            var yyyy = dt.Year.ToString(CultureInfo.InvariantCulture);

            var m = dt.Month;
            var mm = m.ToString().PadLeft(2, '0');

            var d = dt.Day;
            var dd = d.ToString().PadLeft(2, '0');

            var h = dt.Hour;
            var hh = h.ToString().PadLeft(2, '0');

            var mi = dt.Minute;
            var mmi = mi.ToString().PadLeft(2, '0');

            var s = dt.Second;
            var ss = s.ToString().PadLeft(2, '0');


            string w = dt.DayOfWeek.ToString();
            string wcn;

            //中国农历
            string nl = dt.GetChineseDate();
            w = GetWeekNum(w);
            wcn = GetWeekString(w);
            string nowStr = sFormat.Replace("yyyy", yyyy)
                .Replace("mm", mm)
                .Replace("dd", dd)
                .Replace("hh", hh)
                .Replace("mm", mmi)
                .Replace("ss", ss)
                .Replace("W", wcn)
                .Replace("M", m.ToString())
                .Replace("D", d.ToString())
                .Replace("h", h.ToString())
                .Replace("m", mi.ToString())
                .Replace("s", s.ToString())
                .Replace("NL", nl);
            return nowStr;
        }
        /// <summary>
        /// 转换为农历年
        /// </summary>
        /// <param name="date"></param>
        /// <returns></returns>
        public static string GetChineseDate(this DateTime date)
        {
            var cnDate = new ChineseLunisolarCalendar();
            string[] arrMonth = { "", "正月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "冬月", "腊月" };
            string[] arrDay = { "", "初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十" };
            string[] arrYear = { "", "甲子", "乙丑", "丙寅", "丁卯", "戊辰", "己巳", "庚午", "辛未", "壬申", "癸酉", "甲戌", "乙亥", "丙子", "丁丑", "戊寅", "己卯", "庚辰", "辛己", "壬午", "癸未", "甲申", "乙酉", "丙戌", "丁亥", "戊子", "己丑", "庚寅", "辛卯", "壬辰", "癸巳", "甲午", "乙未", "丙申", "丁酉", "戊戌", "己亥", "庚子", "辛丑", "壬寅", "癸丑", "甲辰", "乙巳", "丙午", "丁未", "戊申", "己酉", "庚戌", "辛亥", "壬子", "癸丑", "甲寅", "乙卯", "丙辰", "丁巳", "戊午", "己未", "庚申", "辛酉", "壬戌", "癸亥" };

            var lYear = cnDate.GetYear(date);
            var sYear = arrYear[cnDate.GetSexagenaryYear(date)];
            var lMonth = cnDate.GetMonth(date);
            var lDay = cnDate.GetDayOfMonth(date);

            //获取第几个月是闰月,等于0表示本年无闰月
            var leapMonth = cnDate.GetLeapMonth(lYear);
            var sMonth = arrMonth[lMonth];
            //如果今年有闰月   
            if (leapMonth > 0)
            {
                //闰月数等于当前月份   
                sMonth = lMonth == leapMonth ? string.Format("闰{0}", arrMonth[lMonth - 1]) : sMonth;
                sMonth = lMonth > leapMonth ? arrMonth[lMonth - 1] : sMonth;
            }
            return string.Format("{0}年{1}{2}", sYear, sMonth, arrDay[lDay]);
        }
        /// <summary>
        /// 日期间隔计算,结果单位与flag相同
        /// flag:year/month/day/hour/minute/second
        /// </summary>
        /// <param name="d1"></param>
        /// <param name="d2"></param>
        /// <param name="flag"></param>
        /// <returns></returns>
        public static int DateDiff(this DateTime d1,DateTime d2,string flag)
        {
            var iR = 0;
            switch (flag.ToLower())
            {
                case "year":
                    iR = d2.Year - d1.Year;
                    break;
                case "month":
                    iR = (d2.Year - d1.Year) * 12 + (d2.Month - d1.Month);
                    break;
                case "day":
                    iR = (int)(d2 - d1).TotalDays;
                    break;
                case "hour":
                    iR = (int)(d2 - d1).TotalHours;
                    break;
                case "minute":
                    iR = (int)(d2 - d1).TotalMinutes;
                    break;
                case "second":
                    iR = (int)(d2 - d1).TotalSeconds;
                    break;
            }
            return iR;
        }
        /// <summary>
        /// 获取日期月的最大天数
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static int DaysInMonth(this DateTime dt)
        {
            return DateTime.DaysInMonth(dt.Year, dt.Month);
        }

        #region 私有
        private static string GetWeekString(string w)
        {
            string wcn;
            switch (w)
            {
                case "6":
                    wcn = "星期日";
                    break;
                case "0":
                    wcn = "星期一";
                    break;
                case "1":
                    wcn = "星期二";
                    break;
                case "2":
                    wcn = "星期三";
                    break;
                case "3":
                    wcn = "星期四";
                    break;
                case "4":
                    wcn = "星期五";
                    break;
                case "5":
                    wcn = "星期六";
                    break;
                default:
                    wcn = "星期无";
                    break;
            }
            return wcn;
        }


        /// <summary>
        /// 将英文周描述转为数字型
        /// </summary>
        /// <param name="weekName"></param>
        /// <returns></returns>
        public static string GetWeekNum(string weekName)
        {
            string iR = "1";
            switch (weekName)
            {
                case "Monday":
                    iR = "0";
                    break;
                case "Tuesday":
                    iR = "1";
                    break;
                case "Wednesday":
                    iR = "2";
                    break;
                case "Thursday":
                    iR = "3";
                    break;
                case "Friday":
                    iR = "4";
                    break;
                case "Saturday":
                    iR = "5";
                    break;
                case "Sunday":
                    iR = "6";
                    break;
            }
            return iR;
        }
        #endregion
    }

  

原文地址:https://www.cnblogs.com/blackice/p/2854524.html