ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Asp.net 万年历

2019-07-03 08:50:27  阅读:247  来源: 互联网

标签:Asp string 万年历 System aLabel time using net ChineseCalendarHelper


Calendar控件扩展的万年历,包括阴阳历还可以标记节日、节气。

1、Calendar.aspx.cs

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Globalization;
using System.Text;

public partial class Calendar : System.Web.UI.Page
{
     string[,] holidays = new String[13, 32];
     string[,] Chinaholidays = new String[13, 32];
     string[,] GoodDays = new String[13,32];
     private static ChineseLunisolarCalendar ChinaCalendar = new ChineseLunisolarCalendar();

     protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
     {
         string aHoliday;
         string aChinaHoliday;
         DateTime theDate = e.Day.Date;
         int theChinaMonth = ChinaCalendar.GetMonth(theDate)-1;
         int ThisYear = Convert.ToInt32(DateTime.Now.Year);
         if (ThisYear % 400 == 0 || (ThisYear % 4 == 0 && ThisYear % 100 != 0))
             theChinaMonth = theChinaMonth + 1;
         int theChinaDay = ChinaCalendar.GetDayOfMonth(theDate);

         string ChinaMD = ChineseCalendarHelper.GetMonth(theDate) + "月" + ChineseCalendarHelper.GetDay(theDate);

         string aGoodDay;

         //Response.Write(theDate.ToString()+"<BR>");
         //Response.Write(theChinaMonth.ToString()+"<br>");
         //Response.Write(theChinaDay.ToString());

         aChinaHoliday = Chinaholidays[theChinaMonth,theChinaDay];
         aHoliday = holidays[theDate.Month, theDate.Day];
         aGoodDay = GoodDays[theDate.Month, theDate.Day];
         if (aHoliday != null)
         {
             Label aLabel = new Label();
             aLabel.Font.Size = 10;
             aLabel.ForeColor = System.Drawing.Color.Red;
             aLabel.Text = "<br>["+aHoliday+"]";
             e.Cell.Controls.Add(aLabel);
         }
         if (aChinaHoliday != null)
         {
             Label aLabel = new Label();
             aLabel.Font.Size = 10;
             aLabel.ForeColor = System.Drawing.Color.Red;
             aLabel.Text = "<br>[" + aChinaHoliday + "]";
             e.Cell.Controls.Add(aLabel);
         }
         if (aChinaHoliday == null && aHoliday == null)
         {
             Label aLabel = new Label();
             aLabel.Font.Size = 9;
             //aLabel.ForeColor = System.Drawing.Color.Black;
             aLabel.Font.Bold = false;
             aLabel.Text = "<br>" + ChinaMD + "";
             e.Cell.Controls.Add(aLabel);
         }
         //
         string Sql = "Select GDay From GoodDays";
         string[] GoodDaysCo = DataOK.IDArray(Sql);
         foreach (string i in GoodDaysCo)
         {
             //Response.Write(Convert.ToDateTime(i).ToShortDateString().ToString() + "<br>");
             if (theDate.ToShortDateString() == Convert.ToDateTime(i).ToShortDateString())
             {
                     Label aLabel = new Label();
                     aLabel.Font.Size = 8;
                     aLabel.ForeColor = System.Drawing.Color.Red;
                     aLabel.Text = "<br>[宜嫁娶]";
                     e.Cell.Controls.Add(aLabel);
                     e.Cell.BackColor = System.Drawing.Color.MistyRose;
             }
         }
     }

     protected void Page_Load(object sender, EventArgs e)
     {
         //国际节
         holidays[1, 1] = "元旦";
         holidays[2, 14] = "情人节";
         holidays[3, 8] = "妇女节";
         holidays[3, 15] = "消费者权益日";
         holidays[4, 1] = "愚人节";
         holidays[5, 1] = "劳动节";
         holidays[5, 4] = "青年节";
         holidays[6, 1] = "儿童节";
         holidays[7, 1] = "党的生日";
         holidays[8, 1] = "建军节";
         holidays[9, 10] = "教师节";
         holidays[10, 1] = "国庆节";
         holidays[12, 24] = "平安夜";
         holidays[12, 25] = "圣诞节";

         //中国节
         Chinaholidays[1, 1] = "春节";
         Chinaholidays[1, 15] = "元宵节";
         Chinaholidays[4, 5] = "清明节";
         Chinaholidays[9, 9] = "重阳";
         Chinaholidays[12, 30] = "除夕";
         Chinaholidays[5, 5] = "端午节";
         Chinaholidays[7, 7] = "七夕";
         Chinaholidays[7, 15] = "鬼节";
         Chinaholidays[8, 15] = "中秋节";
         Chinaholidays[12, 8] = "腊八节";
         Chinaholidays[7, 15] = "鬼节";


         this.Calendar1.Caption = "&nbsp;农历今天是:" + ChineseCalendarHelper.GetStemBranch(DateTime.Now)+ "年" + ChineseCalendarHelper.GetMonth(DateTime.Now) + "月" + ChineseCalendarHelper.GetDay(DateTime.Now) + "&nbsp;生肖:" + ChineseCalendarHelper.GetSX(DateTime.Now);
     }
     protected void Calendar1_SelectionChanged(object sender, EventArgs e)
     {
         string Day = this.Calendar1.SelectedDate.ToShortDateString().ToString();
         string GContent = DataOK.Select("Select * From GoodDays Where GDay='" + Day + "'", "GContent");
         //Response.Write(GContent);
         if (GContent == null || GContent == "")
             this.Label1.Text = "无当日资料";
         else
             this.Label1.Text = GContent;
     }
}

2、农历类文件1:ChineseCalendarFormatter.cs

using System;
using System.Collections.Generic;
using System.Text;

using System.Globalization;
using System.Threading;
/// <summary>
/// 自定义格式化器
/// </summary>
public class ChineseCalendarFormatter : IFormatProvider, ICustomFormatter
{
     //实现IFormatProvider
     public object GetFormat(Type formatType)
     {
         if (formatType == typeof(ICustomFormatter))
             return this;
         else
             return Thread.CurrentThread.CurrentCulture.GetFormat(formatType);
     }

     //实现ICustomFormatter
     public string Format(string format, object arg, IFormatProvider formatProvider)
     {
         string s;
         IFormattable formattable = arg as IFormattable;
         if (formattable == null)
             s = arg.ToString();
         else
             s = formattable.ToString(format, formatProvider);
         if (arg.GetType() == typeof(DateTime))
         {
             DateTime time = (DateTime)arg;
             switch (format)
             {
                 case "D": //长日期格式
                     s = String.Format("{0}年{1}月{2}",
                         ChineseCalendarHelper.GetYear(time),
                         ChineseCalendarHelper.GetMonth(time),
                         ChineseCalendarHelper.GetDay(time));
                     break;
                 case "d": //短日期格式
                     s = String.Format("{0}年{1}月{2}", ChineseCalendarHelper.GetStemBranch(time),
                         ChineseCalendarHelper.GetMonth(time),
                         ChineseCalendarHelper.GetDay(time));
                     break;
                 case "M": //月日格式
                     s = String.Format("{0}月{1}", ChineseCalendarHelper.GetMonth(time),
                         ChineseCalendarHelper.GetDay(time));
                     break;
                 case "Y": //年月格式
                     s = String.Format("{0}年{1}月", ChineseCalendarHelper.GetYear(time),
                         ChineseCalendarHelper.GetMonth(time));
                     break;
                 default:
                     s = String.Format("{0}年{1}月{2}", ChineseCalendarHelper.GetYear(time),
                         ChineseCalendarHelper.GetMonth(time),
                         ChineseCalendarHelper.GetDay(time));
                     break;
             }
         }
         return s;
     }
}

3、农历类文件2:ChineseCalendarHelper.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Globalization;


/// <summary>
/// ChineseCalendarHelper 的摘要说明
/// 封装了农历的一些常用字符和对日历处理的最基本功能
/// </summary>
public class ChineseCalendarHelper
{
     //计算中国年
     public static string GetYear(DateTime time)
     {
         StringBuilder sb = new StringBuilder();
         int year = calendar.GetYear(time);
         int d;
         do
         {
             d = year % 10;
             sb.Insert(0, ChineseNumber[d]);
             year = year / 10;
         } while (year > 0);
         return sb.ToString();
     }

     //月
     public static string GetMonth(DateTime time)
     {
         int month = calendar.GetMonth(time);
         int year = calendar.GetYear(time);
         int leap = 0;

         //正月不可能闰月
         for (int i = 3; i <= month; i++)
         {
             if (calendar.IsLeapMonth(year, i))
             {
                 leap = i;
                 break;   //一年中最多有一个闰月
             }

         }
         if (leap > 0) month--;
         return (leap == month + 1 ? "闰" : "") + ChineseMonthName[month - 1];
     }

     //日
     public static string GetDay(DateTime time)
     {
         return ChineseDayName[calendar.GetDayOfMonth(time) - 1];
     }

     //甲子记年法
     public static string GetStemBranch(DateTime time)
     {
         int sexagenaryYear = calendar.GetSexagenaryYear(time);//与指定日期对应的甲子(60 年)循环中的年
         string stemBranch = CelestialStem.Substring(sexagenaryYear % 10 - 1, 1) + TerrestrialBranch.Substring(sexagenaryYear % 12 - 1, 1);
         return stemBranch;
     }

     //生肖
     public static string GetSX(DateTime time)
     {
         int sexagenaryYear = calendar.GetSexagenaryYear(time);//与指定日期对应的甲子(60 年)循环中的年
         string SX = ShuXiang.Substring(sexagenaryYear % 12 - 1, 1);
         return SX;
     }

     private static ChineseLunisolarCalendar calendar = new ChineseLunisolarCalendar();
     private static string ChineseNumber = "〇一二三四五六七八九";
     public const string CelestialStem = "甲乙丙丁戊己庚辛壬癸";
     public const string TerrestrialBranch = "子丑寅卯辰巳午未申酉戌亥";
     public const string ShuXiang = "鼠牛虎兔龙蛇马羊猴鸡狗猪";
     public static readonly string[] ChineseDayName = new string[] {
             "初一","初二","初三","初四","初五","初六","初七","初八","初九","初十",
             "十一","十二","十三","十四","十五","十六","十七","十八","十九","二十",
             "廿一","廿二","廿三","廿四","廿五","廿六","廿七","廿八","廿九","三十"};
     public static readonly string[] ChineseMonthName = new string[] { "正", "二", "三", "四", "五", "六", "七", "八", "九", "十", "十一", "十二" };

}

转载于:https://www.cnblogs.com/zhaoyong/archive/2010/07/26/1785068.html

标签:Asp,string,万年历,System,aLabel,time,using,net,ChineseCalendarHelper
来源: https://blog.csdn.net/weixin_34259559/article/details/94541314

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有