你的位置:首页 > ASP.net教程

[ASP.net教程]简单的日期转换


 

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    }