zoukankan      html  css  js  c++  java
  • 日期处理(转)

    private void button1_Click(object sender, EventArgs e)
    {
                   DateTime nDate = Convert.ToDateTime(dateTimePicker1.Text); //当前需要转换的日期
                   string jrDate = ChinaDate.GetChinaHoliday(nDate); //获取农历节日
                   string jrMonth = ChinaDate.GetMonth(nDate); //获取农历月份
                   string jrDay = ChinaDate.GetDay(nDate); //获取农历日期            
                   DateTime jrSDate = ChinaDate.GetSunYearDate(nDate); //阳历转阴历  
                   string[] weekdays = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };
                   string week = weekdays[Convert.ToInt32(nDate.DayOfWeek)];
                   this.textBox1.Text = jrSDate.ToString();     
            }
        
            /// <summary>
            /// 农历与阴历之间相互转化工具类
            /// </summary>
            public class ChinaDate
            {
                #region 农历信息获取
                private static ChineseLunisolarCalendar china = new ChineseLunisolarCalendar();
                private static Hashtable gHoliday = new Hashtable();
                private static Hashtable nHoliday = new Hashtable();
                private static string[] JQ = { "小寒", "大寒", "立春", "雨水", "惊蛰", "春分", "清明", "谷雨", "立夏", "小满", "芒种", "夏至", "小暑", "大暑", "立秋", "处暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };
                private static int[] JQData = { 0, 21208, 43467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758 };
    
                static ChinaDate(){
                    //公历节日
                    gHoliday.Add("0101", "元旦");
                    gHoliday.Add("0214", "情人节");
                    gHoliday.Add("0305", "雷锋日");
                    gHoliday.Add("0308", "妇女节");
                    gHoliday.Add("0312", "植树节");
                    gHoliday.Add("0315", "消费者权益日");
                    gHoliday.Add("0401", "愚人节");
                    gHoliday.Add("0501", "劳动节");
                    gHoliday.Add("0504", "青年节");
                    gHoliday.Add("0601", "儿童节");
                    gHoliday.Add("0701", "建党节");
                    gHoliday.Add("0801", "建军节");
                    gHoliday.Add("0910", "教师节");
                    gHoliday.Add("1001", "国庆节");
                    gHoliday.Add("1224", "平安夜");
                    gHoliday.Add("1225", "圣诞节");
                    //农历节日
                    nHoliday.Add("0101", "春节");
                    nHoliday.Add("0115", "元宵节");
                    nHoliday.Add("0505", "端午节");
                    nHoliday.Add("0815", "中秋节");
                    nHoliday.Add("0909", "重阳节");
                    nHoliday.Add("1208", "腊八节");
                }
    
                /// <summary>
                /// 获取农历
                /// </summary>
                /// <param name="dt"></param>
                /// <returns></returns>
                public static string GetChinaDate(DateTime dt){
                    if (dt > china.MaxSupportedDateTime || dt < china.MinSupportedDateTime){
                        //日期范围:1901 年 2 月 19 日 - 2101 年 1 月 28 日
                        throw new Exception(string.Format("日期超出范围!必须在{0}到{1}之间!", china.MinSupportedDateTime.ToString("yyyy-MM-dd"), china.MaxSupportedDateTime.ToString("yyyy-MM-dd")));
                    }
                    string str = string.Format("{0} {1}{2}", GetYear(dt), GetMonth(dt), GetDay(dt));
                    string strJQ = GetSolarTerm(dt);
                    if (strJQ != ""){
                        str += " (" + strJQ + ")";
                    }
                    string strHoliday = GetHoliday(dt);
                    if (strHoliday != ""){
                        str += " " + strHoliday;
    
                    }
                    string strChinaHoliday = GetChinaHoliday(dt);
                    if (strChinaHoliday != ""){
                        str += " " + strChinaHoliday;
                    }
                    return str;
                }
    
                /// <summary>
                /// 获取农历年份
                /// </summary>
                /// <param name="dt"></param>
                /// <returns></returns>
                public static string GetYear(DateTime dt)
                {
                    int yearIndex = china.GetSexagenaryYear(dt);
                    string yearTG = " 甲乙丙丁戊己庚辛壬癸";
                    string yearDZ = " 子丑寅卯辰巳午未申酉戌亥";
                    string yearSX = " 鼠牛虎兔龙蛇马羊猴鸡狗猪";
                    int year = china.GetYear(dt);
                    int yTG = china.GetCelestialStem(yearIndex);
                    int yDZ = china.GetTerrestrialBranch(yearIndex);
                    string str = string.Format("[{1}]{2}{3}{0}", year, yearSX[yDZ], yearTG[yTG], yearDZ[yDZ]);
                    return str;
                }
    
                /// <summary>
                /// 获取农历月份
                /// </summary>
                /// <param name="dt"></param>
                /// <returns></returns>
                public static string GetMonth(DateTime dt){
                    int year = china.GetYear(dt);
                    int iMonth = china.GetMonth(dt);
                    int leapMonth = china.GetLeapMonth(year);
                    bool isLeapMonth = iMonth == leapMonth;
                    if (leapMonth != 0 && iMonth >= leapMonth){
                        iMonth--;
                    }
                    string szText = "正二三四五六七八九十";
                    string strMonth = isLeapMonth ? "" : "";
                    if (iMonth <= 10){
                        strMonth += szText.Substring(iMonth - 1, 1);
                    }
                    else if (iMonth == 11){
                        strMonth += "十一";
                    }
                    else{
                        strMonth += "";
                    }
                    return strMonth + "";
                }
    
                /// <summary>
                /// 获取农历日期
                /// </summary>
                /// <param name="dt"></param>
                /// <returns></returns>
                public static string GetDay(DateTime dt){
                    int iDay = china.GetDayOfMonth(dt);
                    string szText1 = "初十廿三";
                    string szText2 = "一二三四五六七八九十";
                    string strDay;
                    if (iDay == 20){
                        strDay = "二十";
                    }
                    else if (iDay == 30){
                        strDay = "三十";
                    }
                    else{
                       strDay = szText1.Substring((iDay - 1) / 10, 1);
                       strDay = strDay + szText2.Substring((iDay - 1) % 10, 1);
                    }
                    return strDay;
                }
    
                /// <summary>
                /// 获取节气
                /// </summary>
                /// <param name="dt"></param>
                /// <returns></returns>
                public static string GetSolarTerm(DateTime dt){
                    DateTime dtBase = new DateTime(1900, 1, 6, 2, 5, 0);
                    DateTime dtNew;
                    double num;
                    int y;
                    string strReturn = "";
                    y = dt.Year;
                    for (int i = 1; i <= 24; i++){
                        num = 525948.76 * (y - 1900) + JQData[i - 1];
                        dtNew = dtBase.AddMinutes(num);
                        if (dtNew.DayOfYear == dt.DayOfYear){
                            strReturn = JQ[i - 1];
                        }
                    }
                    return strReturn;
                }
    
                /// <summary>
                /// 获取公历节日
                /// </summary>
                /// <param name="dt"></param>
                /// <returns></returns>
                public static string GetHoliday(DateTime dt){
                    string strReturn = "";
                    object g = gHoliday[dt.Month.ToString("00") + dt.Day.ToString("00")];
                    if (g != null){
                        strReturn = g.ToString();
                    }
                    return strReturn;
                }
    
    
                /// <summary>
                /// 获取农历节日
                /// </summary>
                /// <param name="dt"></param>
                /// <returns></returns>
                public static string GetChinaHoliday(DateTime dt){
                    string strReturn = "";
                    int year = china.GetYear(dt);
                    int iMonth = china.GetMonth(dt);
                    int leapMonth = china.GetLeapMonth(year);
                    int iDay = china.GetDayOfMonth(dt);
                    if (china.GetDayOfYear(dt) == china.GetDaysInYear(year)){
                        strReturn = "除夕";
                    }
                    else if (leapMonth != iMonth){
                        if (leapMonth != 0 && iMonth >= leapMonth){
                            iMonth--;
                        }
                        object n = nHoliday[iMonth.ToString("00") + iDay.ToString("00")];
                        if (n != null){
                            if (strReturn == ""){
                                strReturn = n.ToString();
                            }
                            else{
                                strReturn += " " + n.ToString();
                            }
                        }
                    }
                    return strReturn;
                }
                #endregion
    
    
    
    
    
                #region 阴历-阳历-转换
    
                /// <summary>
                /// 阴历转为阳历
                /// </summary>
                /// <param name="year">指定的年份</param>
                public static DateTime GetLunarYearDate(DateTime dt){
                    int cnYear = china.GetYear(dt);
                    int cnMonth = china.GetMonth(dt);
                    int num1 = 0;
                    int num2 = china.IsLeapYear(cnYear) ? 13 : 12;
                    while (num2 >= cnMonth){
                        num1 += china.GetDaysInMonth(cnYear, num2--);
                    }
                    num1 = num1 - china.GetDayOfMonth(dt) + 1;
                    return dt.AddDays(num1);
                }
    
                /// <summary>
                /// 阳历转为阴历
                /// </summary>
                /// <param name="dt">公历日期</param>
                /// <returns>农历的日期</returns>
                public static DateTime GetSunYearDate(DateTime dt){
                    int year = china.GetYear(dt);
                    int iMonth = china.GetMonth(dt);
                    int iDay = china.GetDayOfMonth(dt);
                    int leapMonth = china.GetLeapMonth(year);
                    bool isLeapMonth = iMonth == leapMonth;
                    if (leapMonth != 0 && iMonth >= leapMonth){
                        iMonth--;
                    }
                    string str = string.Format("{0}-{1}-{2}", year, iMonth, iDay);
                    DateTime dtNew = DateTime.Now;
                    try{
                        dtNew = Convert.ToDateTime(str); //防止出现2月份时,会出现超过时间,出现“2015-02-30”这种错误日期
                    }
                    catch
                    {}
                    return dtNew;
                }
                #endregion
            }
  • 相关阅读:
    安装浏览器的vue插件
    webpack学习笔记-2-file-loader 和 url-loader
    webpack4.x最详细入门讲解
    简单地使用webpack进行打包
    vue动态监听浏览器窗口高度
    Vue 中 export及export default的区别
    vue 路由懒加载 resolve vue-router配置
    javascript深入理解js闭包
    JS截取字符串常用方法详细整理
    糗事之 -- 用ssh公钥实现免密码登录
  • 原文地址:https://www.cnblogs.com/zhizhuo-1991/p/5639699.html
Copyright © 2011-2022 走看看