久久er99热精品一区二区三区,波多野结衣在线观看一区二区 ,成人做爰视频www网站小优视频,在线免费福利

二維碼
企資網

掃一掃關注

當前位置: 首頁 » 企業資訊 » 農業 » 正文

C也通用節氣類庫__農歷類(很全面)

放大字體  縮小字體 發布日期:2022-01-18 05:57:15    作者:付宗潔    瀏覽次數:149
導讀

自己整理得,可以分享學習高質量代碼,每周期布置學習任務,激發學習C#興趣!用法: DateTime dt = mc.SelectionStart;c = new EcanChineseCalendar(dt);StringBuilder dayInfo = new StringBuilder();dayInfo.Appen

自己整理得,可以分享學習高質量代碼,每周期布置學習任務,激發學習C#興趣!

用法:

DateTime dt = mc.SelectionStart;
c = new EcanChineseCalendar(dt);
StringBuilder dayInfo = new StringBuilder();
dayInfo.Append("陽歷:" + c.DateString + "\r\n");//陽歷日期
dayInfo.Append("農歷:" + c.ChineseDateString + "\r\n");//農歷日期
dayInfo.Append("星期:" + c.WeekDayStr);//星期
dayInfo.Append("時辰:" + c.ChineseHour + "\r\n");//時辰
dayInfo.Append("屬相:" + c.AnimalString + "\r\n");//屬相
dayInfo.Append("節氣:" + c.ChineseTwentyFourDay + "\r\n");//節氣
dayInfo.Append("前一個節氣:" + c.ChineseTwentyFourPrevDay + "\r\n");//前一個節氣
dayInfo.Append("下一個節氣:" + c.ChineseTwentyFourNextDay + "\r\n");//下一個節氣
dayInfo.Append("節日:" + c.DateHoliday + "\r\n");//節日
dayInfo.Append("干支:" + c.GanZhiDateString + "\r\n");//干支
dayInfo.Append("星宿:" + c.ChineseConstellation + "\r\n");//星宿
dayInfo.Append("星座:" + c.Constellation + "\r\n");//星座



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

namespace AH.BI.MWeb.Service
{
#region ChineseCalendarException
/// <summary>
/// 華夏日歷異常處理
/// </summary>
public class newCalendarException : System.Exception
{
public newCalendarException(string msg)
: base(msg)
{
}
}
#endregion

public class EcanChineseCalendar
{
#region 內部結構
private struct SolarHolidayStruct//陽歷
{
public int Month;
public int Day;
public int Recess; //假期長度
public string HolidayName;
public SolarHolidayStruct(int month, int day, int recess, string name)
{
Month = month;
Day = day;
Recess = recess;
HolidayName = name;
}
}

private struct LunarHolidayStruct//農歷
{
public int Month;
public int Day;
public int Recess;
public string HolidayName;

public LunarHolidayStruct(int month, int day, int recess, string name)
{
Month = month;
Day = day;
Recess = recess;
HolidayName = name;
}
}

private struct WeekHolidayStruct
{
public int Month;
public int WeekAtMonth;
public int WeekDay;
public string HolidayName;

public WeekHolidayStruct(int month, int weekAtMonth, int weekDay, string name)
{
Month = month;
WeekAtMonth = weekAtMonth;
WeekDay = weekDay;
HolidayName = name;
}
}
#endregion

#region 內部變量
private DateTime _date;
private DateTime _datetime;

private int _cYear;
private int _cMonth;
private int _cDay;
private bool _cIsLeapMonth; //當月是否閏月
private bool _cIsLeapYear; //當年是否有閏月
#endregion

#region 基礎數據
#region 基本常量
private const int MinYear = 1900;
private const int MaxYear = 2050;
private static DateTime MinDay = new DateTime(1900, 1, 30);
private static DateTime MaxDay = new DateTime(2049, 12, 31);
private const int GanZhiStartYear = 1864; //干支計算起始年
private static DateTime GanZhiStartDay = new DateTime(1899, 12, 22);//起始日
private const string HZNum = "零一二三四五六七八九";
private const int AnimalStartYear = 1900; //1900年為鼠年
private static DateTime ChineseConstellationReferDay = new DateTime(2007, 9, 13);//28星宿參考值,本期為角
#endregion

#region 陰歷數據
/// <summary>
/// 于網上得農歷數據
/// </summary>
/// <remarks>
/// 數據結構如下,共使用17位數據
/// 第17位:表示閏月天數,0表示29天 1表示30天
/// 第16位-第5位(共12位)表示12個月,其中第16位表示第壹月,如果該月為30天則為1,29天為0
/// 第4位-第1位(共4位)表示閏月是哪個月,如果當年沒有閏月,則置0
///</remarks>
private static int[] LunarDateArray = new int[]{
0x04BD8,0x04AE0,0x0A570,0x054D5,0x0D260,0x0D950,0x16554,0x056A0,0x09AD0,0x055D2,
0x04AE0,0x0A5B6,0x0A4D0,0x0D250,0x1D255,0x0B540,0x0D6A0,0x0ADA2,0x095B0,0x14977,
0x04970,0x0A4B0,0x0B4B5,0x06A50,0x06D40,0x1AB54,0x02B60,0x09570,0x052F2,0x04970,
0x06566,0x0D4A0,0x0EA50,0x06E95,0x05AD0,0x02B60,0x186E3,0x092E0,0x1C8D7,0x0C950,
0x0D4A0,0x1D8A6,0x0B550,0x056A0,0x1A5B4,0x025D0,0x092D0,0x0D2B2,0x0A950,0x0B557,
0x06CA0,0x0B550,0x15355,0x04DA0,0x0A5B0,0x14573,0x052B0,0x0A9A8,0x0E950,0x06AA0,
0x0AEA6,0x0AB50,0x04B60,0x0AAE4,0x0A570,0x05260,0x0F263,0x0D950,0x05B57,0x056A0,
0x096D0,0x04DD5,0x04AD0,0x0A4D0,0x0D4D4,0x0D250,0x0D558,0x0B540,0x0B6A0,0x195A6,
0x095B0,0x049B0,0x0A974,0x0A4B0,0x0B27A,0x06A50,0x06D40,0x0AF46,0x0AB60,0x09570,
0x04AF5,0x04970,0x064B0,0x074A3,0x0EA50,0x06B58,0x055C0,0x0AB60,0x096D5,0x092E0,
0x0C960,0x0D954,0x0D4A0,0x0DA50,0x07552,0x056A0,0x0ABB7,0x025D0,0x092D0,0x0CAB5,
0x0A950,0x0B4A0,0x0BAA4,0x0AD50,0x055D9,0x04BA0,0x0A5B0,0x15176,0x052B0,0x0A930,
0x07954,0x06AA0,0x0AD50,0x05B52,0x04B60,0x0A6E6,0x0A4E0,0x0D260,0x0EA65,0x0D530,
0x05AA0,0x076A3,0x096D0,0x04BD7,0x04AD0,0x0A4D0,0x1D0B6,0x0D250,0x0D520,0x0DD45,
0x0B5A0,0x056D0,0x055B2,0x049B0,0x0A577,0x0A4B0,0x0AA50,0x1B255,0x06D20,0x0ADA0,
0x14B63
};

#endregion

#region 星座名稱
private static string[] _constellationName =
{
"白羊座", "金牛座", "雙子座",
"巨蟹座", "獅子座", "處女座",
"天秤座", "天蝎座", "射手座",
"摩羯座", "水瓶座", "雙魚座"
};
#endregion

#region 二十四節氣
private static string[] _lunarHolidayName =
{
"小寒", "大寒", "立春", "雨水",
"驚蟄", "春分", "清明", "谷雨",
"立夏", "小滿", "芒種", "夏至",
"小暑", "大暑", "立秋", "處暑",
"白露", "秋分", "寒露", "霜降",
"立冬", "小雪", "大雪", "冬至"
};
#endregion

#region 二十八星宿
private static string[] _chineseConstellationName =
{
//四 五 六 日 一 二 三
"角木蛟","亢金龍","女土蝠","房日兔","心月狐","尾火虎","箕水豹",
"斗木獬","牛金牛","氐土貉","虛日鼠","危月燕","室火豬","壁水獝",
"奎木狼","婁金狗","胃土彘","昴日雞","畢月烏","觜火猴","參水猿",
"井木犴","鬼金羊","柳土獐","星日馬","張月鹿","翼火蛇","獵水蚓"
};
#endregion

#region 節氣數據
private static string[] SolarTerm = new string[] { "小寒", "大寒", "立春", "雨水", "驚蟄", "春分", "清明", "谷雨", "立夏", "小滿", "芒種", "夏至", "小暑", "大暑", "立秋", "處暑", "白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪", "冬至" };
private static int[] sTermInfo = new int[] { 0, 21208, 42467, 63836, 85337, 107014, 128867, 150921, 173149, 195551, 218072, 240693, 263343, 285989, 308563, 331033, 353350, 375494, 397447, 419210, 440795, 462224, 483532, 504758 };
#endregion

#region 農歷相關數據
private static string ganStr = "甲乙丙丁戊己庚辛壬癸";
private static string zhiStr = "子丑寅卯辰巳午未申酉戌亥";
private static string animalStr = "鼠牛虎兔龍蛇馬羊猴雞狗豬";
private static string nStr1 = "日一二三四五六七八九";
private static string nStr2 = "初十廿卅";
private static string[] _monthString =
{
"出錯","正月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","臘月"
};
#endregion

#region 按公歷計算得節日
private static SolarHolidayStruct[] sHolidayInfo = new SolarHolidayStruct[]{
new SolarHolidayStruct(1, 1, 1, "元旦"),
new SolarHolidayStruct(2, 2, 0, "世界濕地日"),
new SolarHolidayStruct(2, 10, 0, "國際氣象節"),
new SolarHolidayStruct(2, 14, 0, "情人節"),
new SolarHolidayStruct(3, 1, 0, "國際海豹日"),
new SolarHolidayStruct(3, 5, 0, "學雷鋒紀念日"),
new SolarHolidayStruct(3, 8, 0, "婦女節"),
new SolarHolidayStruct(3, 12, 0, "植樹節 孫中山逝世紀念日"),
new SolarHolidayStruct(3, 14, 0, "國際警察日"),
new SolarHolidayStruct(3, 15, 0, "消費者權益日"),
new SolarHolidayStruct(3, 17, 0, "華夏國醫節 國際航海日"),
new SolarHolidayStruct(3, 21, 0, "世界森林日 消除種族歧視國際日 世界兒歌日"),
new SolarHolidayStruct(3, 22, 0, "世界水日"),
new SolarHolidayStruct(3, 24, 0, "世界防治結核病日"),
new SolarHolidayStruct(4, 1, 0, "愚人節"),
new SolarHolidayStruct(4, 7, 0, "世界衛生日"),
new SolarHolidayStruct(4, 22, 0, "世界地球日"),
new SolarHolidayStruct(5, 1, 1, "勞動節"),
new SolarHolidayStruct(5, 2, 1, "勞動節假日"),
new SolarHolidayStruct(5, 3, 1, "勞動節假日"),
new SolarHolidayStruct(5, 4, 0, "青年節"),
new SolarHolidayStruct(5, 8, 0, "世界紅十字日"),
new SolarHolidayStruct(5, 12, 0, "國際護士節"),
new SolarHolidayStruct(5, 31, 0, "世界無煙日"),
new SolarHolidayStruct(6, 1, 0, "國際兒童節"),
new SolarHolidayStruct(6, 5, 0, "世界環境保護日"),
new SolarHolidayStruct(6, 26, 0, "國際禁毒日"),
new SolarHolidayStruct(7, 1, 0, "建黨節 香港回歸紀念 世界建筑日"),
new SolarHolidayStruct(7, 11, 0, "世界人口日"),
new SolarHolidayStruct(8, 1, 0, "建軍節"),
new SolarHolidayStruct(8, 8, 0, "華夏男子節 父親節"),
new SolarHolidayStruct(8, 15, 0, "抗日戰爭勝利紀念"),
new SolarHolidayStruct(9, 9, 0, "毛大大逝世紀念"),
new SolarHolidayStruct(9, 10, 0, "教師節"),
new SolarHolidayStruct(9, 18, 0, "九·一八事變紀念日"),
new SolarHolidayStruct(9, 20, 0, "國際愛牙日"),
new SolarHolidayStruct(9, 27, 0, "世界旅游日"),
new SolarHolidayStruct(9, 28, 0, "孔子誕辰"),
new SolarHolidayStruct(10, 1, 1, "國慶節 國際音樂日"),
new SolarHolidayStruct(10, 2, 1, "國慶節假日"),
new SolarHolidayStruct(10, 3, 1, "國慶節假日"),
new SolarHolidayStruct(10, 6, 0, "老人節"),
new SolarHolidayStruct(10, 24, 0, "聯合國日"),
new SolarHolidayStruct(11, 10, 0, "世界青年節"),
new SolarHolidayStruct(11, 12, 0, "孫中山誕辰紀念"),
new SolarHolidayStruct(12, 1, 0, "世界艾滋病日"),
new SolarHolidayStruct(12, 3, 0, "世界殘疾人日"),
new SolarHolidayStruct(12, 20, 0, "澳門回歸紀念"),
new SolarHolidayStruct(12, 24, 0, "平安夜"),
new SolarHolidayStruct(12, 25, 0, "圣誕節"),
new SolarHolidayStruct(12, 26, 0, "毛大大誕辰紀念")
};
#endregion

#region 按農歷計算得節日
private static LunarHolidayStruct[] lHolidayInfo = new LunarHolidayStruct[]{
new LunarHolidayStruct(1, 1, 1, "春節"),
new LunarHolidayStruct(1, 15, 0, "元宵節"),
new LunarHolidayStruct(5, 5, 0, "端午節"),
new LunarHolidayStruct(7, 7, 0, "七夕情人節"),
new LunarHolidayStruct(7, 15, 0, "中元節 盂蘭盆節"),
new LunarHolidayStruct(8, 15, 0, "中秋節"),
new LunarHolidayStruct(9, 9, 0, "重陽節"),
new LunarHolidayStruct(12, 8, 0, "臘八節"),
new LunarHolidayStruct(12, 23, 0, "北方小年(掃房)"),
new LunarHolidayStruct(12, 24, 0, "南方小年(撣塵)"),
//new LunarHolidayStruct(12, 30, 0, "除夕") //注意除夕需要其它方法進行計算
};
#endregion

#region 按某月第幾個星期幾
private static WeekHolidayStruct[] wHolidayInfo = new WeekHolidayStruct[]{
new WeekHolidayStruct(5, 2, 1, "母親節"),
new WeekHolidayStruct(5, 3, 1, "華夏助殘日"),
new WeekHolidayStruct(6, 3, 1, "父親節"),
new WeekHolidayStruct(9, 3, 3, "國際和平日"),
new WeekHolidayStruct(9, 4, 1, "國際聾人節"),
new WeekHolidayStruct(10, 1, 2, "國際住房日"),
new WeekHolidayStruct(10, 1, 4, "國際減輕自然災害日"),
new WeekHolidayStruct(11, 4, 5, "感恩節")
};
#endregion

#endregion

#region 構造函數
#region ChinaCalendar <公歷日期初始化>
/// <summary>
/// 用一個標準得公歷日期來初使化
/// </summary>
/// <param name="dt"></param>
public EcanChineseCalendar(DateTime dt)
{
int i;
int leap;
int temp;
int offset;

CheckDateLimit(dt);

_date = dt.Date;
_datetime = dt;

//農歷日期計算部分
leap = 0;
temp = 0;

TimeSpan ts = _date - EcanChineseCalendar.MinDay;//計算兩天得基本差距
offset = ts.Days;

for (i = MinYear; i <= MaxYear; i++)
{
temp = GetChineseYearDays(i); //求當年農歷年天數
if (offset - temp < 1)
break;
else
{
offset = offset - temp;
}
}
_cYear = i;

leap = GetChineseLeapMonth(_cYear);//計算該年閏哪個月
//設定當年是否有閏月
if (leap > 0)
{
_cIsLeapYear = true;
}
else
{
_cIsLeapYear = false;
}

_cIsLeapMonth = false;
for (i = 1; i <= 12; i++)
{
//閏月
if ((leap > 0) && (i == leap + 1) && (_cIsLeapMonth == false))
{
_cIsLeapMonth = true;
i = i - 1;
temp = GetChineseLeapMonthDays(_cYear); //計算閏月天數
}
else
{
_cIsLeapMonth = false;
temp = GetChineseMonthDays(_cYear, i);//計算非閏月天數
}

offset = offset - temp;
if (offset <= 0) break;
}

offset = offset + temp;
_cMonth = i;
_cDay = offset;
}
#endregion

#region ChinaCalendar <農歷日期初始化>
/// <summary>
/// 用農歷得日期來初使化
/// </summary>
/// <param name="cy">農歷年</param>
/// <param name="cm">農歷月</param>
/// <param name="cd">農歷日</param>
/// <param name="LeapFlag">閏月標志</param>
public EcanChineseCalendar(int cy, int cm, int cd, bool leapMonthFlag)
{
int i, leap, Temp, offset;

CheckChineseDateLimit(cy, cm, cd, leapMonthFlag);

_cYear = cy;
_cMonth = cm;
_cDay = cd;

offset = 0;

for (i = MinYear; i < cy; i++)
{
Temp = GetChineseYearDays(i); //求當年農歷年天數
offset = offset + Temp;
}

leap = GetChineseLeapMonth(cy);// 計算該年應該閏哪個月
if (leap != 0)
{
this._cIsLeapYear = true;
}
else
{
this._cIsLeapYear = false;
}

if (cm != leap)
{
_cIsLeapMonth = false; //當前日期并非閏月
}
else
{
_cIsLeapMonth = leapMonthFlag; //使用用戶輸入得是否閏月月份
}


if ((_cIsLeapYear == false) || //當年沒有閏月
(cm < leap)) //計算月份小于閏月
{
#region ...
for (i = 1; i < cm; i++)
{
Temp = GetChineseMonthDays(cy, i);//計算非閏月天數
offset = offset + Temp;
}

//檢查日期是否大于蕞大天
if (cd > GetChineseMonthDays(cy, cm))
{
throw new newCalendarException("不合法得農歷日期");
}
offset = offset + cd; //加上當月得天數
#endregion
}
else //是閏年,且計算月份大于或等于閏月
{
#region ...
for (i = 1; i < cm; i++)
{
Temp = GetChineseMonthDays(cy, i); //計算非閏月天數
offset = offset + Temp;
}

if (cm > leap) //計算月大于閏月
{
Temp = GetChineseLeapMonthDays(cy); //計算閏月天數
offset = offset + Temp; //加上閏月天數

if (cd > GetChineseMonthDays(cy, cm))
{
throw new newCalendarException("不合法得農歷日期");
}
offset = offset + cd;
}
else //計算月等于閏月
{
//如果需要計算得是閏月,則應首先加上與閏月對應得普通月得天數
if (this._cIsLeapMonth == true) //計算月為閏月
{
Temp = GetChineseMonthDays(cy, cm); //計算非閏月天數
offset = offset + Temp;
}

if (cd > GetChineseLeapMonthDays(cy))
{
throw new newCalendarException("不合法得農歷日期");
}
offset = offset + cd;
}
#endregion
}


_date = MinDay.AddDays(offset);
}
#endregion
#endregion

#region 私有函數

#region GetChineseMonthDays
//傳回農歷 y年m月得總天數
private int GetChineseMonthDays(int year, int month)
{
if (BitTest32((LunarDateArray[year - MinYear] & 0x0000FFFF), (16 - month)))
{
return 30;
}
else
{
return 29;
}
}
#endregion

#region GetChineseLeapMonth
//傳回農歷 y年閏哪個月 1-12 , 沒閏傳回 0
private int GetChineseLeapMonth(int year)
{

return LunarDateArray[year - MinYear] & 0xF;

}
#endregion

#region GetChineseLeapMonthDays
//傳回農歷 y年閏月得天數
private int GetChineseLeapMonthDays(int year)
{
if (GetChineseLeapMonth(year) != 0)
{
if ((LunarDateArray[year - MinYear] & 0x10000) != 0)
{
return 30;
}
else
{
return 29;
}
}
else
{
return 0;
}
}
#endregion

#region GetChineseYearDays
/// <summary>
/// 取農歷年一年得天數
/// </summary>
/// <param name="year"></param>
/// <returns></returns>
private int GetChineseYearDays(int year)
{
int i, f, sumDay, info;

sumDay = 348; //29天 X 12個月
i = 0x8000;
info = LunarDateArray[year - MinYear] & 0x0FFFF;

//計算12個月中有多少天為30天
for (int m = 0; m < 12; m++)
{
f = info & i;
if (f != 0)
{
sumDay++;
}
i = i >> 1;
}
return sumDay + GetChineseLeapMonthDays(year);
}
#endregion

#region GetChineseHour
/// <summary>
/// 獲得當前時間得時辰
/// </summary>
/// <param name="time"></param>
/// <returns></returns>
///
private string GetChineseHour(DateTime dt)
{

int _hour, _minute, offset, i;
int indexGan;
string ganHour, zhiHour;
string tmpGan;

//計算時辰得地支
_hour = dt.Hour; //獲得當前時間小時
_minute = dt.Minute; //獲得當前時間分鐘

if (_minute != 0) _hour += 1;
offset = _hour / 2;
if (offset >= 12) offset = 0;
//zhiHour = zhiStr[offset].ToString();

//計算天干
TimeSpan ts = this._date - GanZhiStartDay;
i = ts.Days % 60;

indexGan = ((i % 10 + 1) * 2 - 1) % 10 - 1; //ganStr[i % 10] 為日得天干,(n*2-1) %10得出地支對應,n從1開始
tmpGan = ganStr.Substring(indexGan) + ganStr.Substring(0, indexGan + 2);//湊齊12位
//ganHour = ganStr[((i % 10 + 1) * 2 - 1) % 10 - 1].ToString();

return tmpGan[offset].ToString() + zhiStr[offset].ToString();

}
#endregion

#region CheckDateLimit
/// <summary>
/// 檢查公歷日期是否符合要求
/// </summary>
/// <param name="dt"></param>
private void CheckDateLimit(DateTime dt)
{
if ((dt < MinDay) || (dt > MaxDay))
{
throw new newCalendarException("超出可轉換得日期");
}
}
#endregion

#region CheckChineseDateLimit
/// <summary>
/// 檢查農歷日期是否合理
/// </summary>
/// <param name="year"></param>
/// <param name="month"></param>
/// <param name="day"></param>
/// <param name="leapMonth"></param>
private void CheckChineseDateLimit(int year, int month, int day, bool leapMonth)
{
if ((year < MinYear) || (year > MaxYear))
{
throw new newCalendarException("非法農歷日期");
}
if ((month < 1) || (month > 12))
{
throw new newCalendarException("非法農歷日期");
}
if ((day < 1) || (day > 30)) //華夏得月蕞多30天
{
throw new newCalendarException("非法農歷日期");
}

int leap = GetChineseLeapMonth(year);// 計算該年應該閏哪個月
if ((leapMonth == true) && (month != leap))
{
throw new newCalendarException("非法農歷日期");
}


}
#endregion

#region ConvertNumToChineseNum
/// <summary>
/// 將0-9轉成漢字形式
/// </summary>
/// <param name="n"></param>
/// <returns></returns>
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>
/// <param name="num"></param>
/// <param name="bitpostion"></param>
/// <returns></returns>
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>
/// <param name="dayOfWeek"></param>
/// <returns></returns>
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>
/// <param name="date"></param>
/// <param name="month"></param>
/// <param name="week"></param>
/// <param name="day"></param>
/// <returns></returns>
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>
/// 農歷日中文表示
/// </summary>
public string ChineseDayString
{
get
{
switch (this._cDay)
{
case 0:
return "";
case 10:
return "初十";
case 20:
return "二十";
case 30:
return "三十";
default:
return nStr2[(int)(_cDay / 10)].ToString() + nStr1[_cDay % 10].ToString();

}
}
}
#endregion

#region ChineseMonth
/// <summary>
/// 農歷得月份
/// </summary>
public int ChineseMonth
{
get { return this._cMonth; }
}
#endregion

#region ChineseMonthString
/// <summary>
/// 農歷月份字符串
/// </summary>
public string ChineseMonthString
{
get
{
return _monthString[this._cMonth];
}
}
#endregion

#region ChineseYear
/// <summary>
/// 取農歷年份
/// </summary>
public int ChineseYear
{
get { return this._cYear; }
}
#endregion

#region ChineseYearString
/// <summary>
/// 取農歷年字符串如,一九九七年
/// </summary>
public string ChineseYearString
{
get
{
string tempStr = "";
string num = this._cYear.ToString();
for (int i = 0; i < 4; i++)
{
tempStr += ConvertNumToChineseNum(num[i]);
}
return tempStr + "年";
}
}
#endregion

#region ChineseDateString
/// <summary>
/// 取農歷日期表示法:農歷一九九七年正月初五
/// </summary>
public string ChineseDateString
{
get
{
if (this._cIsLeapMonth == true)
{
return "農歷" + ChineseYearString + "閏" + ChineseMonthString + ChineseDayString;
}
else
{
return "農歷" + ChineseYearString + ChineseMonthString + ChineseDayString;
}
}
}
#endregion

#region ChineseTwentyFourDay
/// <summary>
/// 定氣法計算二十四節氣,二十四節氣是按地球公轉來計算得,并非是陰歷計算得
/// </summary>
/// <remarks>
/// 節氣得定法有兩種。古代歷法采用得稱為"恒氣",即按時間把一年等分為24份,
/// 每一節氣平均得15天有余,所以又稱"平氣"。現代農歷采用得稱為"定氣",即
/// 按地球在軌道上得位置為標準,一周360°,兩節氣之間相隔15°。由于冬至時地
/// 球位于點附近,運動速度較快,因而太陽在黃道上移動15°得時間不到15天。
/// 夏至前后得情況正好相反,太陽在黃道上移動較慢,一個節氣達16天之多。采用
/// 定氣時可以保證春、秋兩分必然在晝夜平分得那兩天。
/// </remarks>
public string ChineseTwentyFourDay
{
get
{
DateTime baseDateAndTime = new DateTime(1900, 1, 6, 2, 5, 0); //#1/6/1900 2:05:00 AM#
DateTime newDate;
double num;
int y;
string tempStr = "";

y = this._date.Year;

for (int i = 1; i <= 24; i++)
{
num = 525948.76 * (y - 1900) + sTermInfo[i - 1];

newDate = baseDateAndTime.AddMinutes(num);//按分鐘計算
if (newDate.DayOfYear == _date.DayOfYear)
{
tempStr = SolarTerm[i - 1];
break;
}
}
return tempStr;
}
}

//當前日期前一個蕞近節氣
public string ChineseTwentyFourPrevDay
{
get
{
DateTime baseDateAndTime = new DateTime(1900, 1, 6, 2, 5, 0); //#1/6/1900 2:05:00 AM#
DateTime newDate;
double num;
int y;
string tempStr = "";

y = this._date.Year;

for (int i = 24; i >= 1; i--)
{
num = 525948.76 * (y - 1900) + sTermInfo[i - 1];

newDate = baseDateAndTime.AddMinutes(num);//按分鐘計算

if (newDate.DayOfYear < _date.DayOfYear)
{
tempStr = string.Format("{0}[{1}]", SolarTerm[i - 1], newDate.ToString("yyyy-MM-dd"));
break;
}
}

return tempStr;
}

}

//當前日期后一個蕞近節氣
public string ChineseTwentyFourNextDay
{
get
{
DateTime baseDateAndTime = new DateTime(1900, 1, 6, 2, 5, 0); //#1/6/1900 2:05:00 AM#
DateTime newDate;
double num;
int y;
string tempStr = "";

y = this._date.Year;

for (int i = 1; i <= 24; i++)
{
num = 525948.76 * (y - 1900) + sTermInfo[i - 1];

newDate = baseDateAndTime.AddMinutes(num);//按分鐘計算

if (newDate.DayOfYear > _date.DayOfYear)
{
tempStr = string.Format("{0}[{1}]", SolarTerm[i - 1], newDate.ToString("yyyy-MM-dd"));
break;
}
}
return tempStr;
}

}
#endregion
#endregion

#region 星座
#region Constellation
/// <summary>
/// 計算指定日期得星座序號
/// </summary>
/// <returns></returns>
public string Constellation
{
get
{
int index = 0;
int y, m, d;
y = _date.Year;
m = _date.Month;
d = _date.Day;
y = m * 100 + d;

if (((y >= 321) && (y <= 419))) { index = 0; }
else if ((y >= 420) && (y <= 520)) { index = 1; }
else if ((y >= 521) && (y <= 620)) { index = 2; }
else if ((y >= 621) && (y <= 722)) { index = 3; }
else if ((y >= 723) && (y <= 822)) { index = 4; }
else if ((y >= 823) && (y <= 922)) { index = 5; }
else if ((y >= 923) && (y <= 1022)) { index = 6; }
else if ((y >= 1023) && (y <= 1121)) { index = 7; }
else if ((y >= 1122) && (y <= 1221)) { index = 8; }
else if ((y >= 1222) || (y <= 119)) { index = 9; }
else if ((y >= 120) && (y <= 218)) { index = 10; }
else if ((y >= 219) && (y <= 320)) { index = 11; }
else { index = 0; }

return _constellationName[index];
}
}
#endregion
#endregion

#region 屬相
#region Animal
/// <summary>
/// 計算屬相得索引,注意雖然屬相是以農歷年來區別得,但是目前在實際使用中是按公歷來計算得
/// 鼠年為1,其它類推
/// </summary>
public int Animal
{
get
{
int offset = _date.Year - AnimalStartYear;
return (offset % 12) + 1;
}
}
#endregion

#region AnimalString
/// <summary>
/// 取屬相字符串
/// </summary>
public string AnimalString
{
get
{
int offset = _date.Year - AnimalStartYear; //陽歷計算
//int offset = this._cYear - AnimalStartYear; 農歷計算
return animalStr[offset % 12].ToString();
}
}
#endregion
#endregion

#region 天干地支
#region GanZhiYearString
/// <summary>
/// 取農歷年得干支表示法如 乙丑年
/// </summary>
public string GanZhiYearString
{
get
{
string tempStr;
int i = (this._cYear - GanZhiStartYear) % 60; //計算干支
tempStr = ganStr[i % 10].ToString() + zhiStr[i % 12].ToString() + "年";
return tempStr;
}
}
#endregion

#region GanZhiMonthString
/// <summary>
/// 取干支得月表示字符串,注意農歷得閏月不記干支
/// </summary>
public string GanZhiMonthString
{
get
{
//每個月得地支總是固定得,而且總是從寅月開始
int zhiIndex;
string zhi;
if (this._cMonth > 10)
{
zhiIndex = this._cMonth - 10;
}
else
{
zhiIndex = this._cMonth + 2;
}
zhi = zhiStr[zhiIndex - 1].ToString();

//根據當年得干支年得干來計算月干得第壹個
int ganIndex = 1;
string gan;
int i = (this._cYear - GanZhiStartYear) % 60; //計算干支
switch (i % 10)
{
#region ...
case 0: //甲
ganIndex = 3;
break;
case 1: //乙
ganIndex = 5;
break;
case 2: //丙
ganIndex = 7;
break;
case 3: //丁
ganIndex = 9;
break;
case 4: //戊
ganIndex = 1;
break;
case 5: //己
ganIndex = 3;
break;
case 6: //庚
ganIndex = 5;
break;
case 7: //辛
ganIndex = 7;
break;
case 8: //壬
ganIndex = 9;
break;
case 9: //癸
ganIndex = 1;
break;
#endregion
}
gan = ganStr[(ganIndex + this._cMonth - 2) % 10].ToString();

return gan + zhi + "月";
}
}
#endregion

#region GanZhiDayString
/// <summary>
/// 取干支日表示法
/// </summary>
public string GanZhiDayString
{
get
{
int i, offset;
TimeSpan ts = this._date - GanZhiStartDay;
offset = ts.Days;
i = offset % 60;
return ganStr[i % 10].ToString() + zhiStr[i % 12].ToString() + "日";
}
}
#endregion

#region GanZhiDateString
/// <summary>
/// 取當前日期得干支表示法如 甲子年乙丑月丙庚日
/// </summary>
public string GanZhiDateString
{
get
{
return GanZhiYearString + GanZhiMonthString + GanZhiDayString;
}
}
#endregion
#endregion
#endregion

#region 方法
#region NextDay
/// <summary>
/// 取下一天
/// </summary>
/// <returns></returns>
public EcanChineseCalendar NextDay()
{
DateTime nextDay = _date.AddDays(1);
return new EcanChineseCalendar(nextDay);
}
#endregion

#region PervDay
/// <summary>
/// 取前一天
/// </summary>
/// <returns></returns>
public EcanChineseCalendar PervDay()
{
DateTime pervDay = _date.AddDays(-1);
return new EcanChineseCalendar(pervDay);
}
#endregion
#endregion
}
}

 
(文/付宗潔)
免責聲明
本文僅代表作發布者:付宗潔個人觀點,本站未對其內容進行核實,請讀者僅做參考,如若文中涉及有違公德、觸犯法律的內容,一經發現,立即刪除,需自行承擔相應責任。涉及到版權或其他問題,請及時聯系我們刪除處理郵件:weilaitui@qq.com。
 

Copyright ? 2016 - 2025 - 企資網 48903.COM All Rights Reserved 粵公網安備 44030702000589號

粵ICP備16078936號

微信

關注
微信

微信二維碼

WAP二維碼

客服

聯系
客服

聯系客服:

在線QQ: 303377504

客服電話: 020-82301567

E_mail郵箱: weilaitui@qq.com

微信公眾號: weishitui

客服001 客服002 客服003

工作時間:

周一至周五: 09:00 - 18:00

反饋

用戶
反饋

久久er99热精品一区二区三区,波多野结衣在线观看一区二区 ,成人做爰视频www网站小优视频,在线免费福利
婷婷丁香激情综合| 91丨porny丨蝌蚪视频| 日本不卡123| 五月天激情综合| 久久99精品国产.久久久久久| 韩国精品一区二区| 成人精品小蝌蚪| 色成年激情久久综合| 欧美日韩一区二区三区免费看| 欧美精三区欧美精三区| 欧美岛国在线观看| 国产精品美女久久久久aⅴ国产馆| 欧美国产禁国产网站cc| 怡红院av一区二区三区| 日韩不卡一二三区| 国产成人午夜电影网| 在线日韩av片| 日韩免费电影网站| 国产精品乱码一区二三区小蝌蚪| 中文字幕在线一区免费| 性做久久久久久免费观看| 国产又粗又猛又爽又黄91精品| 成人h版在线观看| 欧美疯狂做受xxxx富婆| 国产欧美一区二区精品仙草咪| 亚洲黄色免费网站| 激情久久五月天| 欧美性生活大片视频| 久久久精品天堂| 亚洲制服丝袜av| 国产成人综合网站| 91麻豆精品国产91久久久资源速度| 欧美激情一区二区三区在线| 午夜国产精品一区| 99久久久久久99| 久久这里只有精品首页| 天天综合日日夜夜精品| 99久久久精品| 国产婷婷色一区二区三区| 五月激情综合婷婷| 91成人在线精品| 欧美激情在线免费观看| 久久99久久久欧美国产| 欧美日韩一区二区在线视频| 国产精品久久久久精k8| 国产一区二区在线观看免费| 成人一级视频在线观看| 欧美成人精品3d动漫h| 亚洲一区在线观看免费观看电影高清| 国产成人在线电影| 精品国产电影一区二区| 日韩va欧美va亚洲va久久| 成人av资源网站| 国产日韩av一区| 久久99精品一区二区三区| 欧美亚洲国产一区二区三区| 国产精品免费视频一区| 国产精品一区二区视频| 精品少妇一区二区三区免费观看| 午夜电影一区二区三区| 色天天综合色天天久久| 日韩一区在线播放| hitomi一区二区三区精品| 精品国产乱码久久久久久1区2区 | 国产日韩欧美精品电影三级在线| 亚洲综合激情另类小说区| 国产999精品久久久久久绿帽| 欧美成人a∨高清免费观看| 日本欧美肥老太交大片| 欧美肥妇bbw| 蜜臀久久久99精品久久久久久| 欧美综合天天夜夜久久| 亚洲精品写真福利| 91福利视频久久久久| 亚洲一区二区高清| 欧美日韩另类一区| 肉丝袜脚交视频一区二区| 日韩写真欧美这视频| 久久99精品国产.久久久久久| 日韩精品影音先锋| 久久99精品久久只有精品| 久久青草国产手机看片福利盒子| 福利一区在线观看| 一区二区三区精品| 91精品国产综合久久久久久久 | 亚洲一区二区三区中文字幕| 在线精品视频小说1| 亚洲sss视频在线视频| 欧美tickling网站挠脚心| 黄色小说综合网站| 最新不卡av在线| 欧美日韩精品一区二区三区 | 欧美色图第一页| 免费在线观看精品| 国产欧美精品一区二区色综合| 91在线精品一区二区三区| 亚洲不卡一区二区三区| 欧美mv日韩mv| 一本色道久久综合精品竹菊| 亚洲成人免费观看| 久久网站最新地址| 成人一区二区在线观看| 午夜视频一区在线观看| 日韩免费在线观看| 99国产欧美另类久久久精品| 香蕉成人啪国产精品视频综合网| 精品处破学生在线二十三| 粉嫩av一区二区三区粉嫩| 亚洲成人激情自拍| 国产精品入口麻豆原神| 91精品国产综合久久福利| 成人av电影在线| 精品中文字幕一区二区小辣椒| 亚洲天天做日日做天天谢日日欢| 日韩美女视频在线| 91黄色免费观看| av影院午夜一区| 韩国精品久久久| 日韩中文字幕91| 亚洲乱码日产精品bd| 国产欧美精品国产国产专区| 欧美一区二区大片| 欧美日韩一卡二卡三卡| 色综合色综合色综合色综合色综合 | 国产精品无码永久免费888| 欧美一级二级在线观看| 欧美在线视频你懂得| av在线不卡免费看| 国产精品一二三| 国产一区二区三区久久悠悠色av| 天堂va蜜桃一区二区三区| 亚洲摸摸操操av| 国产精品久久久久精k8| 中日韩免费视频中文字幕| 精品免费国产二区三区| 日韩精品一区二区三区在线 | 成人丝袜18视频在线观看| 激情五月婷婷综合| 免费人成在线不卡| 喷水一区二区三区| 美女看a上一区| 蜜臀va亚洲va欧美va天堂 | 亚洲精品你懂的| 日韩毛片精品高清免费| 国产精品免费观看视频| 国产精品久久久久一区二区三区| 欧美国产亚洲另类动漫| 国产精品拍天天在线| 国产精品第13页| 亚洲特级片在线| 亚洲综合在线视频| 一区二区三区国产精品| 午夜成人免费视频| 麻豆国产精品777777在线| 免费成人av在线| 国产精品18久久久久久vr| 高清av一区二区| 一本色道亚洲精品aⅴ| 欧美日韩视频在线一区二区| 欧美一区二区三区电影| 精品电影一区二区三区| 国产精品美女一区二区在线观看| 亚洲九九爱视频| 免费日本视频一区| 国产成人av电影在线观看| 972aa.com艺术欧美| 欧美午夜理伦三级在线观看| 日韩久久久久久| 国产精品天美传媒| 亚洲国产wwwccc36天堂| 精品一区二区三区香蕉蜜桃 | 亚洲黄一区二区三区| 日韩福利电影在线| 国产suv精品一区二区6| 欧美日韩视频在线一区二区| 国产亚洲精久久久久久| 国产精品久久一级| 亚洲视频狠狠干| 欧美一二区视频| 欧美激情在线观看视频免费| 亚洲国产日韩在线一区模特| 狠狠v欧美v日韩v亚洲ⅴ| 色哟哟国产精品免费观看| 日韩一级高清毛片| 国产精品乱人伦一区二区| 美女精品自拍一二三四| 色综合天天综合在线视频| 99久精品国产| 欧美美女一区二区三区| 欧美激情在线看| 久久超碰97人人做人人爱| 91浏览器在线视频| 久久精品亚洲精品国产欧美| 亚洲成av人片一区二区三区| av一区二区三区四区| 久久众筹精品私拍模特| 亚洲3atv精品一区二区三区| 94-欧美-setu| 欧美激情一区二区| 激情成人午夜视频|