📄 cndate.cs
字号:
#endregion
#region CheckChineseDateLimit
/// <summary>
/// 检查农历日期是否合理
/// </summary>
private void CheckChineseDateLimit(int year, int month, int day, bool leapMonth)
{
if ((year < MinYear) || (year > MaxYear))
{
throw new Exception("非法农历日期");
}
if ((month < 1) || (month > 12))
{
throw new Exception("非法农历日期");
}
if ((day < 1) || (day > 30)) //中国的月最多30天
{
throw new Exception("非法农历日期");
}
int leap = GetChineseLeapMonth(year);// 计算该年应该闰哪个月
if ((leapMonth == true) && (month != leap))
{
throw new Exception("非法农历日期");
}
}
#endregion
#region ConvertNumToChineseNum
/// <summary>
/// 将0-9转成汉字形式
/// </summary>
private string ConvertNumToChineseNum(char n)
{
if ((n < '0') || (n > '9')) return "";
switch (n)
{
case '0':
return HZNum[0].ToString();
case '1':
return HZNum[1].ToString();
case '2':
return HZNum[2].ToString();
case '3':
return HZNum[3].ToString();
case '4':
return HZNum[4].ToString();
case '5':
return HZNum[5].ToString();
case '6':
return HZNum[6].ToString();
case '7':
return HZNum[7].ToString();
case '8':
return HZNum[8].ToString();
case '9':
return HZNum[9].ToString();
default:
return "";
}
}
#endregion
#region BitTest32
/// <summary>
/// 测试某位是否为真
/// </summary>
private bool BitTest32(int num, int bitpostion)
{
if ((bitpostion > 31) || (bitpostion < 0))
throw new Exception("Error Param: bitpostion[0-31]:" + bitpostion.ToString());
int bit = 1 << bitpostion;
if ((num & bit) == 0)
{
return false;
}
else
{
return true;
}
}
#endregion
#region ConvertDayOfWeek
/// <summary>
/// 将星期几转成数字表示
/// </summary>
private int ConvertDayOfWeek(DayOfWeek dayOfWeek)
{
switch (dayOfWeek)
{
case DayOfWeek.Sunday:
return 1;
case DayOfWeek.Monday:
return 2;
case DayOfWeek.Tuesday:
return 3;
case DayOfWeek.Wednesday:
return 4;
case DayOfWeek.Thursday:
return 5;
case DayOfWeek.Friday:
return 6;
case DayOfWeek.Saturday:
return 7;
default:
return 0;
}
}
#endregion
#region CompareWeekDayHoliday
/// <summary>
/// 比较当天是不是指定的第周几
/// </summary>
private bool CompareWeekDayHoliday(DateTime date, int month, int week, int day)
{
bool ret = false;
if (date.Month == month) //月份相同
{
if (ConvertDayOfWeek(date.DayOfWeek) == day) //星期几相同
{
DateTime firstDay = new DateTime(date.Year, date.Month, 1);//生成当月第一天
int i = ConvertDayOfWeek(firstDay.DayOfWeek);
int firWeekDays = 7 - ConvertDayOfWeek(firstDay.DayOfWeek) + 1; //计算第一周剩余天数
if (i > day)
{
if ((week - 1) * 7 + day + firWeekDays == date.Day)
{
ret = true;
}
}
else
{
if (day + firWeekDays + (week - 2) * 7 == date.Day)
{
ret = true;
}
}
}
}
return ret;
}
#endregion
#endregion
#region 属性
#region 节日
#region newCalendarHoliday
/// <summary>
/// 计算中国农历节日
/// </summary>
public string newCalendarHoliday
{
get
{
string tempStr = "";
if (this._cIsLeapMonth == false) //闰月不计算节日
{
foreach (LunarHolidayStruct lh in lHolidayInfo)
{
if ((lh.Month == this._cMonth) && (lh.Day == this._cDay))
{
tempStr = lh.HolidayName;
break;
}
}
//对除夕进行特别处理
if (this._cMonth == 12)
{
int i = GetChineseMonthDays(this._cYear, 12); //计算当年农历12月的总天数
if (this._cDay == i) //如果为最后一天
{
tempStr = "除夕";
}
}
}
return tempStr;
}
}
#endregion
#region WeekDayHoliday
/// <summary>
/// 按某月第几周第几日计算的节日
/// </summary>
public string WeekDayHoliday
{
get
{
string tempStr = "";
foreach (WeekHolidayStruct wh in wHolidayInfo)
{
if (CompareWeekDayHoliday(_date, wh.Month, wh.WeekAtMonth, wh.WeekDay))
{
tempStr = wh.HolidayName;
break;
}
}
return tempStr;
}
}
#endregion
#region DateHoliday
/// <summary>
/// 按公历日计算的节日
/// </summary>
public string DateHoliday
{
get
{
string tempStr = "";
foreach (SolarHolidayStruct sh in sHolidayInfo)
{
if ((sh.Month == _date.Month) && (sh.Day == _date.Day))
{
tempStr = sh.HolidayName;
break;
}
}
return tempStr;
}
}
#endregion
#endregion
#region 公历日期
#region Date
/// <summary>
/// 取对应的公历日期
/// </summary>
public DateTime Date
{
get { return _date; }
set { _date = value; }
}
#endregion
#region WeekDay
/// <summary>
/// 取星期几
/// </summary>
public DayOfWeek WeekDay
{
get { return _date.DayOfWeek; }
}
#endregion
#region WeekDayStr
/// <summary>
/// 周几的字符
/// </summary>
public string WeekDayStr
{
get
{
switch (_date.DayOfWeek)
{
case DayOfWeek.Sunday:
return "星期日";
case DayOfWeek.Monday:
return "星期一";
case DayOfWeek.Tuesday:
return "星期二";
case DayOfWeek.Wednesday:
return "星期三";
case DayOfWeek.Thursday:
return "星期四";
case DayOfWeek.Friday:
return "星期五";
default:
return "星期六";
}
}
}
#endregion
#region DateString
/// <summary>
/// 公历日期中文表示法 如一九九七年七月一日
/// </summary>
public string DateString
{
get
{
return "公元" + this._date.ToLongDateString();
}
}
#endregion
#region IsLeapYear
/// <summary>
/// 当前是否公历闰年
/// </summary>
public bool IsLeapYear
{
get
{
return DateTime.IsLeapYear(this._date.Year);
}
}
#endregion
#region ChineseConstellation
/// <summary>
/// 28星宿计算
/// </summary>
public string ChineseConstellation
{
get
{
int offset = 0;
int modStarDay = 0;
TimeSpan ts = this._date - ChineseConstellationReferDay;
offset = ts.Days;
modStarDay = offset % 28;
return (modStarDay >= 0 ? _chineseConstellationName[modStarDay] : _chineseConstellationName[27 + modStarDay]);
}
}
#endregion
#region ChineseHour
/// <summary>
/// 时辰
/// </summary>
public string ChineseHour
{
get
{
return GetChineseHour(_datetime);
}
}
#endregion
#endregion
#region 农历日期
#region IsChineseLeapMonth
/// <summary>
/// 是否闰月
/// </summary>
public bool IsChineseLeapMonth
{
get { return this._cIsLeapMonth; }
}
#endregion
#region IsChineseLeapYear
/// <summary>
/// 当年是否有闰月
/// </summary>
public bool IsChineseLeapYear
{
get
{
return this._cIsLeapYear;
}
}
#endregion
#region ChineseDay
/// <summary>
/// 农历日
/// </summary>
public int ChineseDay
{
get { return this._cDay; }
}
#endregion
#region ChineseDayString
/// <summary>
/// 农历日中文表示
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -